我是一個新的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