我想像我在这里尝试的那样获得具有最小“差异”值的每个组的第一行。我怎样才能做到这一点?
此查询
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
明白我的意思
其中“beStichtagDat”是变量,并且取决于前两个属性“aeVpid”和“aeEreignisDat”
我在某些属性和子查询上尝试了一些group by,并在“differenz”上使用了min(),我还尝试了对组的row_number(),但我无法完成它
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