gpt4 book ai didi

sql - SQL 中 GROUP BY 子句的变体使用

转载 作者:行者123 更新时间:2023-12-04 16:07:38 26 4
gpt4 key购买 nike

设想以下架构和示例数据 (SQL Server 2008):

OriginatingObject
----------------------------------------------
ID
1
2
3

ValueSet
----------------------------------------------
ID OriginatingObjectID DateStamp
1 1 2009-05-21 10:41:43
2 1 2009-05-22 12:11:51
3 1 2009-05-22 12:13:25
4 2 2009-05-21 10:42:40
5 2 2009-05-20 02:21:34
6 1 2009-05-21 23:41:43
7 3 2009-05-26 14:56:01

Value
----------------------------------------------
ID ValueSetID Value
1 1 28
etc (a set of rows for each related ValueSet)

我需要获取每个 OriginatingObject 的最新 ValueSet 记录的 ID。不要假设记录的 ID 越高,它就越新。

我不确定如何正确使用 GROUP BY 以确保组合在一起形成每个聚合行的结果集包括具有该分组的最高 DateStamp 值的行的 ID。我需要使用子查询还是有更好的方法?

最佳答案

您可以使用相关子查询或将 IN 用于多列和 GROUP-BY。

请注意,简单的 GROUP-BY 只能将您带到 OriginatingIDs 和 Timestamps 的列表。为了提取相关的 ValueSet ID,最干净的解决方案是使用子查询。

带 GROUP-BY 的多列 IN(可能更快):

SELECT O.ID, V.ID
FROM Originating AS O, ValueSet AS V
WHERE O.ID = V.OriginatingID
AND
(V.OriginatingID, V.DateStamp) IN
(
SELECT OriginatingID, Max(DateStamp)
FROM ValueSet
GROUP BY OriginatingID
)

相关子查询:

SELECT O.ID, V.ID
FROM Originating AS O, ValueSet AS V
WHERE O.ID = V.OriginatingID
AND
V.DateStamp =
(
SELECT Max(DateStamp)
FROM ValueSet V2
WHERE V2.OriginatingID = O.ID
)

关于sql - SQL 中 GROUP BY 子句的变体使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1187644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com