我使用带有聚合函数的 GROUP BY 来聚合表(按多个外键、值列和向下舍入到整日的时间戳列进行分组)。
但是有一列我需要获取分组中的第一行,而不是聚合值。我看过 FIRST_VALUE() 但它是一个窗口函数,而不是聚合函数。
在伪代码中,我希望执行此操作[FIRST() 函数不存在]:
SELECT
ForeignKey1
,ForeignKey2
,MIN(StartTime) AS StartTime
,Foo
,AVG(Bar) AS Bar
,FIRST(Baz) AS Baz
FROM
Qux
GROUP BY
ForeignKey1
,ForeignKey2
,Foo
,CONVERT(DATE, StartTime)
如何获取第一个值而不是聚合值?
最佳答案
您可以在 CTE 中应用行号,然后提取整个第一行,无需单独的 MIN
聚合:
;With Ordered as (
SELECT
*,
ROW_NUMBER() OVER(
PARTITION BY
ForeignKey1
,ForeignKey2
,Foo
,CONVERT(DATE, StartTime)
ORDER BY StartTime) as rn,
AVG(Bar) OVER (
PARTITION BY
ForeignKey1
,ForeignKey2
,Foo
,CONVERT(DATE, StartTime)) as BarAvg
FROM Qux
)
SELECT * from Ordered
WHERE rn = 1
关于sql-server - 获取 GROUP BY 中的第一个值而不是聚合值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43757374/