SQL SERVER:多个结果集中每个id的一个结果

时间:2016-11-24 10:31:30

标签: sql-server

下面是我的表架构: -

Appointments
-------------------------------------------------
|apptID| persID| apptDate| apptCode| apptConfirm|
-------------------------------------------------

上表记录了所有约会。 我想获得一个结果集,如果apptCode是“200”,那么就可以获得该人的先前约会。

我尝试了以下查询

WITH selected_person AS
(SELECT persID, apptDate FROM Appointments WHERE apptCode IN ('200'))

SELECT apptID, apptDate, apptCode 
FROM selected_person sp LEFT JOIN Appointments ap ON sp.persID = ap.persID 
WHERE ap.apptDate < sp.apptDate

上面的查询让我得到了以前的约会,但我只想要一个结果,这个结果是先前约会的apptCode'200'

我不知道LIMIT在这种情况下会有什么帮助。 任何指针都会非常感激

由于

1 个答案:

答案 0 :(得分:2)

您可以为每个以前的约会提供一个带窗口函数的索引,然后选择第一个,如下所示:

WITH selected_person AS (
    SELECT persID, apptDate FROM Appointments WHERE apptCode IN ('200')
), previous_appointment AS (
    SELECT ap.apptID, ap.apptDate, ap.apptCode, ROW_NUMBER() OVER (PARTITION BY ap.persID ORDER BY ap.apptDate DESC) ix
    FROM selected_person sp 
    LEFT JOIN Appointments ap ON sp.persID = ap.persID 
    WHERE ap.apptDate < sp.apptDate
)
SELECT apptID, apptDate, apptCode 
    FROM previous_appointment
    WHERE ix=1;