获取具有最大日期的行

时间:2019-06-12 22:06:24

标签: sql-server row-number

我正在尝试编写查询以获取具有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。

有人可以看到我在此查询中做错什么吗?

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