Вот один вариант (Oracle; я не говорю на MySQL).
Разделение даты и времени - плохая идея;эти значения должны содержаться в том же столбце DATE
типа данных (что я и сделал; если ваша модель действительно использует два столбца, сначала объедините их, а затем примените функцию TO_DATE
).
Что это делает?
T1
CTE - ваши данные выборки INTER
добавляет DURATION
количество секунд к каждому значению столбца DATUM
(DATE
имя столбца будет недопустимым,что касается Oracle, поскольку он зарезервирован для имени типа данных) - последний
SELECT
возвращает студентов, чьи значения INTER.DATIME
перекрываются
SQL> alter session set nls_Date_format = 'dd.mm.yyyy hh24:Mi:ss';
Session altered.
SQL> with t1 (student, datum, duration) as
2 (select 'a', to_date('12.09.2019 11:12:30', 'dd.mm.yyyy hh24:mi:ss'), 30 from dual
3 union all
4 select 'b', to_date('12.09.2019 11:13:30', 'dd.mm.yyyy hh24:mi:ss'), 60 from dual
5 union all
6 select 'c', to_date('12.09.2019 11:14:00', 'dd.mm.yyyy hh24:mi:ss'), 60 from dual
7 union all
8 select 'd', to_date('12.09.2019 11:18:30', 'dd.mm.yyyy hh24:mi:ss'), 40 from dual
9 ),
10 inter as
11 (select student, datum, duration,
12 datum + (column_value - 1) / (24 * 60 * 60) datime
13 from t1,
14 table(cast(multiset(select level from dual
15 connect by level <= duration + 1
16 ) as sys.odcinumberlist))
17 )
18 select distinct student, datum, duration
19 from inter
20 where datime in (select datime
21 from inter
22 group by datime
23 having count(*) > 1);
S DATUM DURATION
- ------------------- ----------
b 12.09.2019 11:13:30 60
c 12.09.2019 11:14:00 60
SQL>