【发布时间】:2020-10-10 13:47:43
【问题描述】:
我有 3 组列 [日期、状态、客户 ID]。我需要一种优雅的方法来计算周二到一天的独特客户,这意味着在周二的计数将只包括该周二的独特客户。周三的计数包括周二和周三的不同客户。在星期四,计数应包括星期二、星期三和星期四的不同客户。这将重复到下一个星期一,然后在星期二重新开始循环。如何使用 SQL 处理此逻辑?还假设不支持 count distinct over window 函数。
假设这是来源
+----------+-----------+---------+
| date|customer_id| status|
+----------+-----------+---------+
|2020-06-08| 001|AVAILABLE|
|2020-06-08| 001| EXPIRED|
|2020-06-08| 001|AVAILABLE|
|2020-06-08| 002|AVAILABLE|
|2020-06-08| 002| EXPIRED|
|2020-06-08| 003| EXPIRED|
|2020-06-08| 003|AVAILABLE|
|2020-06-09| 001|AVAILABLE|
|2020-06-09| 001|AVAILABLE|
|2020-06-09| 002| EXPIRED|
|2020-06-09| 003|AVAILABLE|
|2020-06-09| 003| EXPIRED|
|2020-06-09| 003| EXPIRED|
|2020-06-10| 001| EXPIRED|
|2020-06-10| 001| EXPIRED|
|2020-06-10| 001|AVAILABLE|
|2020-06-10| 001|AVAILABLE|
|2020-06-10| 002|AVAILABLE|
|2020-06-10| 002|AVAILABLE|
|2020-06-10| 002| EXPIRED|
|2020-06-10| 002|AVAILABLE|
|2020-06-10| 002| EXPIRED|
|2020-06-10| 003| EXPIRED|
|2020-06-10| 003|AVAILABLE|
|2020-06-10| 003|AVAILABLE|
|2020-06-11| 001| EXPIRED|
|2020-06-11| 001| EXPIRED|
|2020-06-12| 001|AVAILABLE|
|2020-06-12| 001| EXPIRED|
|2020-06-12| 003| EXPIRED|
|2020-06-12| 003|AVAILABLE|
|2020-06-12| 004|AVAILABLE|
|2020-06-13| 001|AVAILABLE|
|2020-06-13| 002|AVAILABLE|
|2020-06-13| 002|AVAILABLE|
|2020-06-13| 002|AVAILABLE|
|2020-06-14| 001| EXPIRED|
|2020-06-14| 003| EXPIRED|
|2020-06-14| 004| EXPIRED|
|2020-06-15| 001| EXPIRED|
|2020-06-15| 001|AVAILABLE|
|2020-06-15| 001| EXPIRED|
|2020-06-15| 003| EXPIRED|
|2020-06-15| 003|AVAILABLE|
|2020-06-16| 001|AVAILABLE|
|2020-06-16| 001| EXPIRED|
|2020-06-16| 002|AVAILABLE|
|2020-06-16| 002|AVAILABLE|
|2020-06-16| 002| EXPIRED|
|2020-06-16| 002| EXPIRED|
|2020-06-16| 003| EXPIRED|
+----------+-----------+---------+
这是预期的结果
+----------+-----------+---------+
| date| count| status|
+----------+-----------+---------+
|2020-06-08| NULL| NULL|
|2020-06-09| 2|AVAILABLE|
|2020-06-09| 2| EXPIRED|
|2020-06-10| 3| EXPIRED|
|2020-06-10| 3|AVAILABLE|
|2020-06-11| 3|AVAILABLE|
|2020-06-11| 3| EXPIRED|
|2020-06-12| 4|AVAILABLE|
|2020-06-12| 3| EXPIRED|
|2020-06-13| 4|AVAILABLE|
|2020-06-14| 4| EXPIRED|
|2020-06-15| 4| EXPIRED|
|2020-06-15| 4|AVAILABLE|
|2020-06-16| 3| EXPIRED|
|2020-06-16| 2|AVAILABLE|
+----------+-----------+---------+
【问题讨论】:
-
请提供样本数据和期望的结果。
标签: sql apache-spark-sql presto