2013-07-22 66 views
0

我需要获取某个过程后20天范围内的记录。在某些记录的N天范围内选择行

有一个表medical包含数据如下图所示:

这里是SQLFIDDLE:

enter image description here

规则是:如果集团是A3,然后在20天内的所有操作(to the same patient in the same hospital)是免费的的收费。

所以,这里所有的操作,直到09.02.2013应该是免费的。 (20.01.2013 + 20天)

问题:如何在申请A3组过程的20天之内检索所有记录?

+0

您可以进行嵌套查询并进行日期数学计算,也可以查看LAG函数并遍历行,直到您超过时间段。 – Randy

+0

我试过滞后函数,它不允许时间间隔,只有行间隔。 – bonsvr

回答

1

我冒昧地改变dat的数据类型,并将组名改为groupe。

WITH modified_medical 
    AS (SELECT hospital, pid, dat 
      FROM medical 
      WHERE groupe = 'A3') 
    SELECT * 
    FROM medical a, modified_medical b 
    WHERE  b.hospital = a.hospital 
     AND b.pid = a.pid 
     AND a.dat BETWEEN b.dat AND b.dat + 20 
ORDER BY a.hospital, a.pid, a.dat; 

样品小提琴here