2012-01-30 41 views
1

我使用SQL Server 2005.我有一個表,其中FK:兩列(book number, bookshelf number)。 PK = FK + Datetime列。而且我也有價值的專欄。我想要創建查詢,按以下方式對數據進行排序。查詢中的數據排序

我有這樣的數據集:

BookNumber BookshelfNumber   DateTime   Value 
    0    0    12.01.2012 14:40:42  4 
    0    0    12.01.2012 14:45:42  5 
    0    0    12.01.2012 14:48:42  9 
    0    1    12.01.2012 14:38:42  1 
    0    1    12.01.2012 14:42:42  4 
    0    1    12.01.2012 14:48:42  1 
    1    1    12.01.2012 14:38:42  5 
    1    1    12.01.2012 14:48:42  7 
    1    1    12.01.2012 14:58:42  4 

查詢後,我想這樣的結果:

BookNumber BookshelfNumber   DateTime   Value 
    0    0    12.01.2012 14:40:42  4 
    0    1    12.01.2012 14:38:42  1 
    1    1    12.01.2012 14:38:42  5 
+0

你能** **描述中的英文單詞是什麼你想查詢??例如。給定'BookNumber = 0/BookshelfNumber = 0' - 爲什麼你想要選擇'Value = 4'行(而不是另一個??)只是看到所需的輸出留下**猜測**(充其量!)到你想要的東西.... – 2012-01-30 10:35:16

+0

@marc_s它看起來是一個由BookNumber和BookShelfNumber組成的組,並給出了最小Datetime &&最小值 – 2012-01-30 10:39:48

+0

@aF的行。這是一個猜測 - 可能是正確的 - 但人們應該問的應該**說明**這些東西,而不是讓我們猜測..... – 2012-01-30 10:41:25

回答

5

可以使用ROW_NUMBER功能的號碼添加到您的數據集

  • 重新啓動編號Booknumber & BookshelfNumberPARTITION BY
  • 號碼結果從最舊到最新datetimeORDER BY

SQL語句

SELECT * 
FROM (
      SELECT BookNumber 
        , BookShelfNumber 
        , DateTime 
        , Value 
        , rn = ROW_NUMBER() OVER (PARITION BY BookNumber, BookshelNumber ORDER BY DateTime) 
      FROM Books 
     ) b 
WHERE rn = 1 
+1

好猜! – 2012-01-30 11:00:27