下面是我的表架构: -
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在这种情况下会有什么帮助。 任何指针都会非常感激
由于
答案 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;