2016-09-15 78 views
-2

我是一個新的SQL Server,並具有以下查詢:如何在此查詢中使用ROW_NUMBER?

SELECT distinct top 10 ExecuteDate 
FROM [ClubEatc].[dbo].[GetOnlineBills] 
ORDER BY ExecuteDate DESC 

我應該用在查詢Row_Number,我怎麼可以編寫查詢?

謝謝大家。

+3

我們有**你想放什麼樣的目的沒有**的想法'ROW_NUMBER()'到。 –

+0

添加更多關於你的問題的細節,row_number順序是什麼,你想分區,如果是的話,那麼在什麼? – Monah

回答

1

如果你想有一個編號爲每一行和每一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以獲得更有意義的結果。

+0

謝謝,但如何使用哪裏cluase,例如哪裏行= 1? –

+0

你爲什麼需要這個?這不是'ROW_NUMBER()OVER(PARTITION BY ORDER BY ExecuteDate DESC)'。每個行號都不同於上面的。如果你只想要第一行然後在我的數據庫中使用'SELECT TOP 1' –

+0

返回兩個值不同:1395/6/17和1395/6/11,當使用頂部只顯示我1395/6/17,並且想要獲得1395/6/11的價值。 –

1

你的意思是這樣的:

SELECT distinct top 10 ROW_NUMBER() OVER(ORDER BY ExecuteDate DESC), ExecuteDate 
FROM [ClubEatc].[dbo].[GetOnlineBills] 
ORDER BY ExecuteDate DESC 
1

您可以使用:

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 
+0

的感謝,但是這裏WHERE RN = 1向我展示了兩行! –

+0

而第二個查詢? 'SELECT DISTINCT ExecuteDate FROM [GetOnlineBills]'它將返回多少行 – gofr1

+0

SELECT DISTINCT ExecuteDate FROM [GetOnlineBills]返回我兩條記錄,我想要在哪裏訪問所有行,例如row = 1,row = 2 –