2013-07-22 2 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 дней)

Вопрос: Как я могу получить все записи в течение 20 дней после того, как будет применен процесс группы A3?

+0

вы можете сделать вложенный запрос и выполнить математику по дате, или вы можете искать функции LAG и ходить по строкам, пока не пройдете период времени. – Randy

+0

Я пробовал функцию задержки, она не позволяет интервалы времени, только интервалы строк. – bonsvr

ответ

1

Я взял на себя смелость изменить тип данных dat и изменил название группы на группу.

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.