私は現在の注文、SQL Serverの各グループ内でのTOP(1)の行を取得する方法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
クエリに基づいて、各PK_PatientIdのトップ1行を選択する場所からのデータの一部、次のセットを持っていますそれがこの結果に私を導く
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に移行する必要があります。
望ましい結果は、私が唯一のSQL Server 2000を使用して同じ結果をするSQL 2005でROW_NUMBERを使用しているとき、私は取得しています
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
です。
私はあなたがちょうどあなたのWHERE句の最後にこれをストラップに必要SQL 2000
これはうまくいきました。私はそれについて考えなかった。私はグループの中でTOP(1)に焦点を当てていました。私は患者の各グループでTOP(1)行を取得することを考えていたので。しかし、それは良い仕事をしました。 –
確かに、このサブクエリに含まれる他のすべての条件が必要です。そうでないと、後で "アクティブ"でない訪問を選択する可能性があります。 –
@Damien - 投稿した時点で投稿を編集していました。 –