Oracle SQL: сравните диапазоны дат и получите даты того же дня - PullRequest
0 голосов
/ 27 сентября 2018

У меня разные события:

enter image description here

Если более двух из них происходят за один день, я хотел бы знать, какие и какмногие из них.Как построить команду SQL?

Ожидаемый результат:

expected output

Более двух событий в один день.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

выборочный ввод:

create table ns_123(a int,b date,c date);

insert into ns_123 values(179,'27-sep-2018','27-sep-2018');

insert into ns_123 values(181,'26-sep-2018','28-sep-2018');

insert into ns_123 values(180,'27-sep-2018','27-sep-2018');

select * from ns_123;

select distinct n1.a from  ns_123 n1,ns_123 n2 where  (n1.b-n2.b)>=(n1.c-n2.c);

выборочный вывод:

179
180
181
0 голосов
/ 27 сентября 2018

Попробуйте:

    WITH calendar
     AS (    SELECT TRUNC( SYSDATE - LEVEL ) AS cal_day
               FROM DUAL
         CONNECT BY LEVEL < 30)
  SELECT calendar.cal_day,
         COUNT( e.event_id ) AS number_of_events,
         LISTAGG( e.event_id, ', ' ) WITHIN GROUP (ORDER BY e.date_from)
            AS events
    FROM calendar, event e
   WHERE calendar.cal_day BETWEEN e.date_from AND e.date_until
GROUP BY calendar.cal_day
  HAVING COUNT( e.event_id ) > 1;

Вы всегда можете изменить число в CONNECT BY LEVEL < :n или материализовать календарь в виде таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...