Mysql: Получить кол-во записей
Имеется 2 таблицы MariaDB (Ver 15.1 Distrib 5.5.64-MariaDB, for Linux (x86_64)) :
CREATE TABLE Table1
(`phone` int, `calldate` datetime)
;
INSERT INTO Table1
(`phone`, `calldate`)
VALUES
(123, '2020-01-01 10:00:00'),
(123, '2020-01-01 11:00:00'),
(123, '2020-01-01 12:00:00')
;
CREATE TABLE Table2
(`phone` int, `calldate` datetime)
;
INSERT INTO Table2
(`phone`, `calldate`)
VALUES
( 123, '2020-01-01 09:01:00'),
( 123, '2020-01-01 09:02:00'),
( 123, '2020-01-01 10:15:00'),
( 123, '2020-01-01 10:20:00'),
( 123, '2020-01-01 10:23:00'),
( 123, '2020-01-01 11:05:00'),
( 123, '2020-01-01 11:12:00'),
( 123, '2020-01-01 11:25:00')
;
Как получить следующий результат: Поле calldate 1-ой записи из table1 (2020-01-01 10:00:00) более позднее чем поле calldate 2-х записей из table2. Аналогично для 2-ой записи - кол-во записей равно 5 (с 09:01:00 по 10:23:00) Но 2 записи из table2 с calldate 09:01:00 и 09:02:00 уже "перекрыты" 1-ой записью из table1, так что результат должен быть равен 3,а не 5.
|------+----------------------+-------+
| phone | calldate | count |
|-------+---------------------+-------+
| 123 | 2020-01-01 09:02:00 | 2 |
| 123 | 2020-01-01 10:23:00 | 3 |
| 123 | 2020-01-01 11:25:00 | 3 |
|------+---------------------+|------+|
Также, calldate в результирующей наборе должен быть равен наболее позднему значению calldate из "перекрытого" подмножества.
Версия MySQL не поддерживает window functions
Ответы (1 шт):
На MariaDB не проверял, но на PostgreSQL работает (LIMIT на MariaDB есть)
select phone, max_date, count
from (
select t2.phone,max(t2.calldate) as max_date, count(*) as count,
(select t1.calldate from table1 t1 where t1.phone = t2.phone and t1.calldate > t2.calldate order by t1.calldate limit 1) as t1_date
from table2 t2
group by t1_date, t2.phone
) as q