Как проставить в таблице 0 клиентам, в даты, когда они не приходили и 1, когда приходили? SQL
Есть таблица вида:
| Дата | Клиент | Выручка |
|---|---|---|
| 01.01.2021 | Маша | 100 |
| 03.01.2021 | Маша | 200 |
Как проставить в таблице 0 клиентам, в даты, когда они не приходили и 1, когда приходили? Чтобы получить таблицу вида:
| Дата | Клиент | Приходил |
|---|---|---|
| 01.01.2021 | Маша | 1 |
| 02.01.2021 | Маша | 0 |
| 03.01.2021 | Маша | 1 |
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
WITH RECURSIVE
calendar AS ( SELECT MIN(`date`) datefrom, MAX(`date`) datetill
FROM sourcetable
UNION ALL
SELECT datefrom + INTERVAL 1 DAY, datetill
FROM cte
WHERE datefrom < datetill ),
users AS ( SELECT DISTINCT user
FROM sourcetable )
SELECT users.user,
calendar.datefrom `date`,
sourcetable.`date` IS NULL attendance
FROM calendar
CROSS JOIN users
LEFT JOIN sourcetable ON users.user = sourcetable.user
AND calendar.datefrom = sourcetable.`date`;