2010-09-08 140 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 

希望这会有所帮助。