我是一个新的SQL Server,并具有以下查询:如何在此查询中使用ROW_NUMBER?
SELECT distinct top 10 ExecuteDate
FROM [ClubEatc].[dbo].[GetOnlineBills]
ORDER BY ExecuteDate DESC
我应该用在查询Row_Number
,我怎么可以编写查询?
谢谢大家。
我是一个新的SQL Server,并具有以下查询:如何在此查询中使用ROW_NUMBER?
SELECT distinct top 10 ExecuteDate
FROM [ClubEatc].[dbo].[GetOnlineBills]
ORDER BY ExecuteDate DESC
我应该用在查询Row_Number
,我怎么可以编写查询?
谢谢大家。
如果你想有一个编号为每一行和每一ExecuteDate应该是不同的:
WITH CTE AS
(
SELECT DISTINCT ExecuteDate FROM [ClubEatc].[dbo].[GetOnlineBills]
)
SELECT TOP 10 ExecuteDate, RN = ROW_NUMBER() OVER (ORDER BY ExecuteDate DESC)
FROM CTE
ORDER BY ExecuteDate DESC
或GROUP BY
:
SELECT TOP 10 ExecuteDate, RN = ROW_NUMBER() OVER (ORDER BY ExecuteDate DESC)
FROM [ClubEatc].[dbo].[GetOnlineBills]
GROUP BY ExecuteDate
ORDER BY ExecuteDate DESC
也许你想看到整个记录,但只有每个ExecuteDate-Group的第一个。然后,这个查询将工作:
WITH CTE AS
(
SELECT ExecuteDate,
RN_DESC = ROW_NUMBER() OVER (PARTITION BY ExecuteDate
ORDER BY ExecuteDate DESC)
FROM [ClubEatc].[dbo].[GetOnlineBills]
)
SELECT TOP 10 ExecuteDate
FROM CTE
WHERE RN_DESC = 1
ORDER BY ExecuteDate DESC
而是仅列ExecuteDate
你可以列出所有。但是ExecuteDate
是要分组的列,并且您没有告诉我们要将哪个列用于每个组的排序,因此您希望查看每个ExecuteDate组的哪一行。所以目前这个查询返回每个组的任意一行。将PARTITION BY ExecuteDate ORDER BY ExecuteDate DESC
更改为f.e. PARTITION BY ExecuteDate ORDER BY AnotherDateOrIdColumn DESC
以获得更有意义的结果。
谢谢,但如何使用哪里cluase,例如哪里行= 1? –
你为什么需要这个?这不是'ROW_NUMBER()OVER(PARTITION BY ORDER BY ExecuteDate DESC)'。每个行号都不同于上面的。如果你只想要第一行然后在我的数据库中使用'SELECT TOP 1' –
返回两个值不同:1395/6/17和1395/6/11,当使用顶部只显示我1395/6/17,并且想要获得1395/6/11的价值。 –
你的意思是这样的:
SELECT distinct top 10 ROW_NUMBER() OVER(ORDER BY ExecuteDate DESC), ExecuteDate
FROM [ClubEatc].[dbo].[GetOnlineBills]
ORDER BY ExecuteDate DESC
您可以使用:
SELECT TOP 10 ExecuteDate
FROM (
SELECT ExecuteDate,
ROW_NUMBER() over (PARTITION BY ExecuteDate ORDER BY ExecuteDate DESC) as RN
FROM [GetOnlineBills]
) as t
WHERE RN = 1
ORDER BY ExecuteDate DESC
或者:
SELECT TOP 10 ExecuteDate
FROM (
SELECT TOP 1 WITH TIES ExecuteDate
FROM [GetOnlineBills]
ORDER BY ROW_NUMBER() over (PARTITION BY ExecuteDate ORDER BY ExecuteDate DESC)
) as t
ORDER BY ExecuteDate DESC
的感谢,但是这里WHERE RN = 1向我展示了两行! –
而第二个查询? 'SELECT DISTINCT ExecuteDate FROM [GetOnlineBills]'它将返回多少行 – gofr1
SELECT DISTINCT ExecuteDate FROM [GetOnlineBills]返回我两条记录,我想要在哪里访问所有行,例如row = 1,row = 2 –
我们有**你想放什么样的目的没有**的想法'ROW_NUMBER()'到。 –
添加更多关于你的问题的细节,row_number顺序是什么,你想分区,如果是的话,那么在什么? – Monah