我想用从VHSTATUS表中检索到的最新时间更新VHMAIN表。我写了如下的查询
select a.vehi_id,a.statustime,a.vhstatus,max(b.statustime)
newstatustime,b.vhstatus newstatus
from vhmain a inner join vhstatus b on a.vehi_id=b.vehi_id2
group by a.vehi_id,a.statustime,a.vhstatus having
a.statustime<>max(b.statustime)
我收到错误
列'vhstatus.vhstatus'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
如果我在GROUP BY子句中添加'vhstatus.vhstatus',整个数据将会出错
请建议我查询
修改:表格和预期结果数据
VHMAIN vehi_id statustime vhstatus 38 2004-03-08 9 VHSTATUS vehi_id2 statustime vhstatus 38 2004-03-11 55 38 2004-03-08 55 38 2004-03-08 9 Expected result vehi_id statustime vhstatus newstatustime newstatus 38 2004-03-08 9 2004-03-11 55
答案 0 :(得分:0)
确定。您是否尝试过嵌套查询?
例如:
select tbl.*, department.Name
from department
inner join (
select departmentId, COUNT(*) cnt
from employees
group by departmentId
) AS tbl on tbl.departmentId = department.Id
答案 1 :(得分:0)
这是你可以做到的:
warning enumeration value GRASS,WATER,STREET bit handled in switch
上面未经测试的代码Buildings.cpp
bool Buildings::isBuildable(Field::FieldType type)
{
switch(type)
{
case Field::HOME:
return true;
case Field::TOWNHALL:
return false;
}
}
Properties.cpp
bool Properties::isBuildable(Field::FieldType type)
{
switch(type)
{
case Field::GRASS:
return true;
case Field::WATER:
return false;
case Field::STREET:
return false;
}
}
update VHMAIN
set VHMAIN.vhstatus = VHSTATUS.vhstatus
from VHMAIN
inner join VHSTATUS
on VHMAIN.vehi_id = VHSTATUS.vehi_id2
where VHSTATUS.statustime = (select top 1 vhs.statustime
from VHSTATUS.statustime vhs
where vhs.vehi_id2 = VHSTATUS.vehi_id2
order by vhs.statustime desc);
来自select
的最新statustime
项,并在外部命令中对VHSTATUS
进行检查,以便您准确找到项目您正在搜索,然后statustime
update
到VHMAIN
。
答案 2 :(得分:0)
select tbl.*,x.vhstatus from vhstatus x inner join (select
a.vehi_id,a.statustime,a.vhstatus,max(b.statustime) newstatustime from vhmain a
inner join vhstatus b on a.vehi_id=b.vehi_id2 group by
a.vehi_id,a.statustime,a.vhstatus having max(a.statustime)
<>max(b.statustime)) tbl on tbl.newstatustime=x.statustime and
tbl.vehi_id=x.vehi_id2 order by tbl.vehi_id