我有,我想根據目前的訂單如何獲得每個小組內TOP(1)排在SQL Server 2000
PK_PatientId PK_PatientVisitId PK_VisitProcedureId DateSort
------------ ----------------- ------------------- -----------------------
1 4 4 2009-06-22 00:00:00.000
1 3 3 2009-06-22 00:00:00.000
1 2 2 2010-03-11 00:00:00.000
1 1 1 2010-03-11 00:00:00.000
5 6 6 2009-05-24 00:00:00.000
5 5 5 2009-11-07 00:00:00.000
7 7 7 2009-05-24 00:00:00.000
8 8 8 2009-05-24 00:00:00.000
9 9 9 2009-05-24 00:00:00.000
10 10 10 2009-05-24 00:00:00.000
查詢來選擇頂部1行每個PK_PatientId一些下面一組數據這導致我這個結果是
SELECT
P.PK_PatientId
, PV.PK_PatientVisitId
, MAX(TVP.PK_VisitProcedureId) AS PK_VisitProcedureId
, MAX(PV.LastUpdated) AS DateSort
--, Row_Number() OVER (Partition BY PK_PatientId ORDER BY PV.PK_PatientVisitId DESC) AS RowNo
FROM
dbo.M_Patient AS P
INNER JOIN
dbo.M_PatientVisit AS PV
ON
P.PK_PatientId = PV.FK_PatientId
INNER JOIN
dbo.TX_VisitProcedure AS TVP
ON
PV.PK_PatientVisitId = TVP.FK_PatientVisitId
WHERE
(P.IsActive = 1)
AND
(PV.IsActive = 1)
AND
(TVP.IsActive = 1)
GROUP BY
PK_PatientId
, PK_PatientVisitId
ORDER BY
PK_PatientId
, PK_PatientVisitId DESC
我必須通過取得RowNo = 1來獲得行號功能,我正在做的其餘功能。但是現在我不得不把這個過程帶到SQL 2000中,因爲這個函數不能被使用。
期望的結果是
PK_PatientId PK_PatientVisitId PK_VisitProcedureId DateSort RowNo
------------ ----------------- ------------------- ----------------------- --------------------
1 4 4 2009-06-22 00:00:00.000 1
5 6 6 2009-05-24 00:00:00.000 1
7 7 7 2009-05-24 00:00:00.000 1
8 8 8 2009-05-24 00:00:00.000 1
9 9 9 2009-05-24 00:00:00.000 1
在SQL 2005中ROW_NUMBER時我得到我想要只使用SQL 2000相同的結果。
我不得不使用SQL 2000
工作。我沒有想過。我關注TOP(1)之間的團體。因爲我正在考慮在每組患者中進入TOP(1)行。但它工作很好。 – 2010-11-23 07:55:35
當然,它需要包含在這個子查詢中的所有其他WHERE條件 - 否則,你可能會選擇一個不是「活躍」的訪問 – 2010-11-23 07:55:58