假設你想要得到的MIN(BOOKING_ID)的PROVIDER_ID通過CLIENT_ID分組下面應該工作:
SELECT
Client_ID,
Booking_ID,
Provider_ID
FROM (
SELECT
Client_ID,
Provider_ID,
Booking_ID,
ROW_NUMBER() OVER (PARTITION BY Client_ID ORDER BY Booking_ID) as RowNumber
FROM
Bookings
) OrderedTable
WHERE
OrderedTable.RowNumber = 1
如何這行得通? ROW_NUMBER OVER (ORDER BY field)
爲您提供行號,如果結果集是由特定字段排序的。該PARTITION BY field
允許你通過一個特定的鍵分區表(在這種情況下CLIENT_ID)將重置ROW_NUMBER每個CLIENT_ID(所以如果ROWNUMBER = 1,它是爲特定客戶端的第一個條目)
更多細節在這裏: http://msdn.microsoft.com/en-us/library/ms186734.aspx
使用語法:
WITH OrderedTable AS
(
SELECT
Client_ID,
Provider_ID,
Booking_ID,
ROW_NUMBER() OVER (PARTITION BY Client_ID ORDER BY Booking_ID) as RowNumber
FROM
Bookings
)
SELECT
Client_ID,
Provider_ID,
Booking_ID
FROM
OrderedTable
WHERE
RowNumber = 1
嗨肖恩,這是夢幻般的。我很高興。對於有同樣問題的其他人,我會在第二個選擇中使用名稱標題(在我的情況b中)發生錯誤 - 這會導致錯誤 - 也要感謝鏈接 - 將來證明在將來非常有用 – finngeraghty
很高興我可以幫助:) –