A
2020-06-02 | B
2020-06-02 | C
2020-06-01 | A
2020-06-01 | C
Как получить такой отчет:
Name | Вхождение по датам, начиная с последней
A | [0,1,1]
B | [1,1,0]
C | [1,1,1]
?
Предполагаю, что к полной таблице, которая будет содержать полной список дат и имен, надо сделать left join имеющийся. Затем сгруппировать по имени
SELECT * FROM test ┌───────Date─┬─Name─┐ │ 2020-06-02 │ A │ │ 2020-06-01 │ A │ │ 2020-06-03 │ B │ │ 2020-06-02 │ B │ │ 2020-06-03 │ C │ │ 2020-06-02 │ C │ │ 2020-06-01 │ C │ └────────────┴──────┘ 7 rows in set. Elapsed: 0.004 sec. SET joined_subquery_requires_alias = 0 Ok. 0 rows in set. Elapsed: 0.001 sec. SELECT Name, groupArray(flag) FROM ( SELECT Name, sum(Date = Date2) AS flag FROM ( SELECT *, 1 AS joinusingme FROM test INNER JOIN ( SELECT Date AS Date2, 1 AS joinusingme FROM test GROUP BY Date ) USING (joinusingme) ) GROUP BY Name, Date2 ORDER BY Name ASC, Date2 DESC ) GROUP BY Name ┌─Name─┬─groupArray(flag)─┐ │ B │ [1,1,0] │ │ C │ [1,1,1] │ │ A │ [0,1,1] │ └──────┴──────────────────┘ 3 rows in set. Elapsed: 0.004 sec.
Обсуждают сегодня