Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Хитрый поиск первичной записи и вторичной за время


Автор: Lorigin 19.7.2009, 16:08
Добрый день, сижу ломаю голову

есть таблица reception, там id человека, и дату приема

вообщем нужно посчитать дату первичного приема (приемы могут заполняться задним числом) делаю это так:

Код

SELECT id, MIN(date) as firstrec FROM receptions 
GROUP BY id ORDER BY `id` 


так же существует "вторичный" прием.. то есть это минимальный по дате прием (из диапазона), но не первичный... тоесть вторичный прием за разные промежутки разный.

пример приемов записи по одному ID:
10.03.2008  <- первичный прием
12.03.2008  <- вторичный прием за 2008 год
18.09.2008
10.03.2009 <- вторичный прием за 2009 год
13.05.2009

 
что собственно нужно сделать:
1. в заданном временном промежутке найти все записи у которых есть первичный прием
Не понимаю почему не работает:
Код

SELECT * MIN(date) as firstrec FROM receptions 
GROUP BY id
HAVING firstrec BETWEEN '2009-3-19' AND '2009-7-19' ORDER BY id


2. в заданном временном промежутке найти все записи у которых есть вторичный прием
как это делать я вообще не понимаю.. возможно ли исключить из таблицы поиска первичные приемы (пункт 1) и уже в этом искать минимальное вхождение..

очень прошу помощи, голова уже кругом 

Автор: Akina 21.7.2009, 19:30
Вытащить все "первичные приёмы" несложно, это ты сделал.
Осталось отделить нужные приёмы (нужным образом связать исходную таблицу с запросом) и наложить требование попадания в период:
Код

select *
from reception as r
join 
(
  SELECT id, MIN(date) as firstrec 
  FROM receptions 
  GROUP BY id 
) as r1
on r.id=r1.id and r.date>r1.firstrec 
where r.date between StartOfPeriod and EndOfPeriod

При связывании r.date>r1.firstrec даёт вторичные приёмы, а r.date=r1.firstrec соответственно первичные.

Автор: Lorigin 23.7.2009, 10:17
спасибо огромное

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)