在sql server中按组选择每组的第一行

问题描述 投票:0回答:1

我想像我在这里尝试的那样获得具有最小“差异”值的每个组的第一行。我怎样才能做到这一点?

此查询

SELECT 
ae.vpid as aeVpid,
ae.EreignisDat as aeEreignisDat, 
be.StichtagDat as beStichtagDat,
abs(datediff(day, ae.EreignisDat, be.StichtagDat)) as differenz
FROM AEGE as ae 
left outer join BEST as be
ON ae.VPID = be.VPID
WHERE ae.EreignisDat <> be.StichtagDat
Order By aevpid, differenz asc, beStichtagDat desc

明白我的意思

this

其中“beStichtagDat”是变量,并且取决于前两个属性“aeVpid”和“aeEreignisDat”

我在某些属性和子查询上尝试了一些group by,并在“differenz”上使用了min(),我还尝试了对组的row_number(),但我无法完成它

sql-server group-by
1个回答
0
投票

row_number()
+
partition by
可能是这里的方法,但这仍然不完整,因为问题显示了有关如何拆分组的任何内容:

SELECT  aeVpid, aeEreignisDat, beStichtagDat, differenz
FROM (
    select
        ae.vpid as aeVpid,
        ae.EreignisDat as aeEreignisDat, 
        be.StichtagDat as beStichtagDat,
        abs(datediff(day, ae.EreignisDat, be.StichtagDat)) as differenz,
        row_number() over (partition by ???? order by abs(datediff(day, ae.EreignisDat, be.StichtagDat))) rn

    from AEGE as ae 
    left join BEST as be on ae.VPID = be.VPID
    where ae.EreignisDat <> be.StichtagDat
) t
WHERE rn = 1
ORDER BY aevpid, differenz, beStichtagDat DESC
© www.soinside.com 2019 - 2024. All rights reserved.