はスタックを検索していましたが、特定の回答が見つかりませんでした。私は病院で働き、日々の生活を楽にしたいと思っています。我々は、配置されたカテーテルからデータを収集し、患者を1日1回または時には1日2回訪問する。私はこの情報を保存するためにいくつかのPHPを書いた(SQL Server 2012)。 dbo.patientsテーブルが1つあります。別のIDを選択する方法は、完全な行を表示する?
|ID|PatientID|Station|Name |Catheter|Room|VisitDate|Visit
-----------------------------------------------------------------------------
|1 |123456789|ACHI |Muller|PDK |12 |12.12.17 |all fine, nothing special
|2 |123456789|ACHI |Muller|PDK |12 |13.12.17 |catheter removed
|3 |234567891|GYN |Meyer |PDK |4 |04.07.17 |pain in the back, raised bolus
|4 |123456789|ACHI |Muller|PDK |12 |14.12.17 |no infection, dismiss
|5 |234567891|GYN |Meyer |PDK |4 |05.07.17 |still pain, raised up to 12
|6 |234567891|GYN |Meyer |PDK |4 |06.07.17 |non functional, removed
IDはデータベースで自動増分され、フォームには入力されません。 PatientIDは病院で一意の値です。 他の列はすべて同じである可能性があります(たとえば、1日に10カテーテル、またはCatheter = PDKまたは2つの名前が同じか、同じ部屋を共有するなど)。 データベースには1日約20回のエントリーがあります。
私の目的は、現在カテーテルを持っている患者のリストを表示することです。したがって、すべての列が必要ですが、最新の訪問日のみが必要です。つまり、PatientIDは2回表示されません。与えられた例の出力は次のようになります。
|ID|PatientID|Station|Name |Catheter|Room|VisitDate|Visit
-----------------------------------------------------------------------------
|4 |123456789|ACHI |Muller|PDK |12 |14.12.17 |no infection, dismiss
|6 |234567891|GYN |Meyer |PDK |4 |06.07.17 |non functional, removed
私はすでにSELECT * FROM dbo.patients
を示す、PHPでテーブルを持っているが、私はこれを濾過し、私はなぜ知らない必要があります。私はSELECT DISTINCT
を試しましたが、PatientIDをうまくフィルタリングしましたが、1つの列しか返さず、全体の行が必要です。 searchingstackoverflowを通じて
私は似た何かを見つけて、それを試してみた:
WITH t AS (
SELECT ROW_NUMBER() OVER(
PARTITION BY PatientID
ORDER BY VisitDate
) AS rnum,*
FROM dbo.patients
)
SELECT * FROM t a WHERE rnum IN (
SELECT MAX(rnum) FROM t
GROUP BY PatientID
HAVING t.PatientID=a.PatientID
)
それは動作しますが、誰もがalseあまり複雑なアイデアを持っているそのappropiate場合またはかどうかは知りません。彼が最新のエントリを表示する場合、追加、私は本当に得ることはありません。
ありがとうございます!
ディルク
他のアプローチは、あなたが外側のクエリでROW_NUMBERを使用することができます私は最初のアプローチを使ったkあなたはそんなに、それは動作します!しかし[名前]はどういう意味ですか?私はただそれを削除し、それはまだ動作します。 –
あなたの名前の列 –
はい、ただし、そのクエリの目的は何ですか?何が必要なの?私はそれを把握することはできません:)。どうもありがとうございます! –