1

我想在预订数据库表( ) 中找出PROVIDER_ID客户 ( ) 的第一个提供商 ( )CLIENT_IDBOOKING_ID

我目前SELECTCLIENT_ID第一个,然后计算其他各种东西。

我按 ( CLIENT_ID) 分组,计数正确。

我正在寻找的是

SELECT case when(min(BOOKING_ID)) then PROVIDER_ID else null end)

但我无法在SELECT/CASE WHEN

我希望这是有道理的,而且问题很清楚。

理想情况下,我想要一个单一的解决方案SELECT

4

1 回答 1

1

假设您想按 CLIENT_ID 获取 MIN(BOOKING_ID) 分组的 PROVIDER_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)如果结果集按特定字段排序,则为您提供行号。允许您按特定键(在本例中为 Client_ID)对表进行分区,该PARTITION BY field键将为每个 Client_ID 重置 ROW_NUMBER(因此,如果 RowNumber = 1,则它是该特定客户端的第一个条目)

更多细节在这里:http: //msdn.microsoft.com/en-us/library/ms186734.aspx

使用 WITH 语法:

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
于 2013-06-28T17:43:02.770 回答