我正在尝试编写查询以获取具有maxdate的行。
在进行研究时,我发现以下查询应该起作用:
SELECT OrgSeatID, CreateDate, T.ROW
FROM (SELECT OrgSeatID, CreateDate, ROW_NUMBER() OVER(PARTITION BY OrgSeatID ORDER BY CreateDate DESC) AS [ROW]
FROM OrgSeat) AS T
WHERE T.[ROW] = 1
但是,它返回的是所有行,没有按照应有的顺序对CreateDate DESC进行排序,并且ROW列的所有行都读取1。
有人可以看到我在此查询中做错什么吗?
答案 0 :(得分:1)
您编写的查询将根据您的PARTITION BY
返回每个ROW_NUMBER()
窗口函数将为每个数据库创建一个分区,然后为该数据库中的每个OrgSeatID获取一行。
如果您想要所有记录中的最新记录,那么实际上最简单的方法是:
SELECT TOP 1 OrgSeatID, CreateDate
FROM OrgSeat
ORDER BY CreateDate DESC
使用窗口函数的等效项虽然不那么理想,但将是:
SELECT OrgSeatID, CreateDate, T.ROW
FROM (SELECT OrgSeatID, CreateDate, ROW_NUMBER() OVER(ORDER BY CreateDate DESC) AS [ROW]
FROM OrgSeat
) AS T
WHERE T.[ROW] = 1