SQL的常规时间范围

时间:2013-12-02 14:21:32

标签: mysql sql

我正在尝试用SQL做一些事情,但我无法弄清楚应该怎么做。我有这张桌子

 ----------------------------------
 |id_visit | visit_date | ssn     |
 ----------------------------------
 |1        |1940-01-07  |123125789|
 ----------------------------------
 |2        |1975-03-15  |987743271|
 ----------------------------------
 | ...     |  ...       | ...     |

我需要选择一年内访问过五次以上的患者的SSN。我怎么做?我知道它涉及'HAVING COUNT(id_visit)'但是时间部分......这是一个不同的故事,因为我的目标不是在特定的时间范围内选择ssn,而是在一般范围内。

从@Gordon Linoff回答,我稍微修改了一下查询,以消除结果中的重复并获得最大结果。

 select p_ssn as SSN, max(visits_within_one_year) as "Maximum number of visits" 
 from (select t.p_ssn,count(*) as visits_within_one_year
         from t join
              t tyr
              on t.p_ssn = tyr.p_ssn and
              tyr.visit_date between t.visit_date and adddate(t.visit_date, 365)
              group by t.p_ssn,t.visit_date 
              having visits_within_one_year > 5)results
 group by p_ssn;

2 个答案:

答案 0 :(得分:2)

假设您的意思是日历年,以下查询将检索SSN在一年中出现五次以上的所有SSN和年份组合:

select ssn, year(visit_date) as yr
from t
group by ssn, year(visit_date)
having count(*) > 5;

如果问题是关于任意年份的,那么您可以使用自联接和聚合:

select t.ssn, t.visit_date, count(*) as visits_within_one_year
from t join
     t tyr
     on t.ssn = tyr.ssn and
        tyr.visit_date between t.visit_date and adddate(t.visit_date, 365)
group by t.ssn, t.visit_date
having visits_within_one_year > 5;

答案 1 :(得分:1)

如果你的意思是在太阳年(jan / dec)内获得那些ssn:

select ssn
from tablename
group by ssn,year(visit_date)
having count(ssn)>5