假设你想要得到的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
很高兴我可以帮助:) –