2010-09-08 179 views
0

我有一個包含以下列的表:patient_id,visit_id和visit_date。我怎樣才能寫出一個查詢,以獲得每個病人最近訪問日期的max(visit_id)? (幾個visit_id可能發生在同一天的同一患者)查詢以獲取最大記錄數

基本上,我想最終沒有重複的患者ID。

謝謝。

+2

你會用什麼數據庫? MSFT,MYSQL,PVS? – user404463 2010-09-08 17:43:34

+0

我已經添加了「每個組最大的標籤」。這個問題在Stack Overflow上已經被回答了幾十次。 – 2010-09-08 17:58:45

回答

2
select t.patient_id, max(t.visit_id) 
    from (select t.patient_id, max(t.visit_date) maxdate 
      from table t 
     group by t.patient_id) tt, table t 
where t.patient_id = tt.patient_id 
    and t.visit_date = tt.maxdate 
group by t.patient_id 
2
select patient_id, max(t.visit_id) from 
table t inner join ( 
    select patiend_id, max(visit_date) as latest_visit 
    from table 
    group by patient_id 
) lv on 
t.patient_id = lv.patientID and t.visit_date = lv.latest_visit 
group by t.patient_id 
0

只要使用GROUP BY和子選擇。

SELECT patient_id, visit_date, max(visit_id) 
FROM tbl 
JOIN (
    SELECT patient_id, max(visit_date) FROM tbl GROUP by patient_id 
) AS t 
    USING (patient_id, visit_date) 
GROUP BY patient_id, visit_date 
0

既然你需要做的「最大」的兩列,你需要的是子查詢。我沒有測試過以下查詢,但它應該是這樣的:

SELECT patient_id, MAX(visit_id) AS maxvisit, maxdate 
FROM (
    SELECT patient_id, visit_id, MAX(visit_date) AS maxdate 
    FROM mytable 
    GROUP BY patient_id, visit_id 
) t 
GROUP BY patient_id, maxdate 

希望這會有所幫助。