2016-11-24 92 views
0

下面是我的表架構: -SQL SERVER:一個結果爲多個結果每個ID設置

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

您可以通過'可以組sp.persID',獲取MAX(apptDate),並按apptDate desc排序。 – FDavidov

+0

您可以查看SQL Server 2012中引入的滯後/潛在函數。另一個選項是使用行號並重新連接到n -1 –

回答

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; 
+0

輝煌!這有助於:) – Villie

+0

@Villie很好,謝謝你的反饋! – Lucero

+0

你是對的!我承認 – JoDev