如何在不使用 GROUP BY 子句的情况下获取列值
Posted
技术标签:
【中文标题】如何在不使用 GROUP BY 子句的情况下获取列值【英文标题】:How to get column value without using in GROUP BY clause 【发布时间】:2018-10-12 10:35:25 【问题描述】:我想用从 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
【问题讨论】:
请添加相关表格的结构。一些样本数据也不会受到伤害。 更新语句在哪里? @FindOutIslamNow 我猜 George 正在尝试首先选择正确的值,以确保更新实际上会更新预期的记录。 @LajosArpad:使用表格的示例结构进行编辑。 我已经根据您的结构添加了一个答案,但请注意它未经测试。 【参考方案1】:好的。你试过嵌套查询吗?
例如:
select tbl.*, department.Name
from department
inner join (
select departmentId, COUNT(*) cnt
from employees
group by departmentId
) AS tbl on tbl.departmentId = department.Id
【讨论】:
谢谢哥们。我有个主意【参考方案2】:你可以这样做:
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
来自 VHSTATUS
的具有最新 statustime
的项目,并将其与外部命令中的 statustime
进行检查,以便您准确找到您正在搜索的项目,然后是 @987654326 @VHMAIN
到它的vhstatus
。
【讨论】:
【参考方案3】: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
【讨论】:
以上是关于如何在不使用 GROUP BY 子句的情况下获取列值的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在具有GROUP BY子句的查询中选择非聚合列,而GROUP BY子句在功能上不依赖于GROUP BY子句中的列?
如何在不使用 GROUP BY 或 PARTITION BY 的情况下对 Oracle SQL 中的数据进行分组
如何在没有附加查询的情况下在 SQL Server 中连接没有子查询的 GROUP BY 子句中的字符串?