如何在一段时间 Impala/SQL 之前获取不同值的计数?

How to get the count of distinct values until a time period Impala/SQL?

我有一个原始 table 记录在特定时间段内来到商店的客户 ID。使用 Impala,我想计算每天来到商店的不同客户 ID 的数量。 (例如,在第 3 天,到目前为止访问了 5 个不同的客户)

这里有一个原始的简单例子 table 我有:

 Day    ID
 1    1234
 1    5631
 1    1234
 2    1234
 2    4456
 2    5631
 3    3482
 3    3452
 3    1234
 3    5631
 3    1234

这是我想要得到的:

 Day    Count(distinct ID) until that day
 1        2
 2        3
 3        5

有没有办法在单个查询中轻松完成此操作?

试试这个:

 select day, count(distinct(id)) from yourtable group by day

不能 100% 确定是否适用于 impala

但是如果你有 table 天。或者,如果您有办法在 impala.

上即时创建派生的 table
CREATE TABLE days ("DayC" int);

INSERT INTO days
    ("DayC")
VALUES  (1), (2), (3);

 CREATE TABLE days AS
     SELECT DISTINCT "Day"
     FROM sales

您可以使用这个查询

SqlFiddleDemo Postgresql

SELECT "DayC", COUNT(DISTINCT "ID")
FROM sales
cross JOIN days 
WHERE "Day" <= "DayC"
GROUP BY "DayC"

输出

| DayC | count |
|------|-------|
|    1 |     2 |
|    2 |     3 |
|    3 |     5 |

UPDATE VERSION

SELECT T."DayC", COUNT(DISTINCT "ID")
FROM sales
cross JOIN (SELECT DISTINCT "Day" as "DayC" FROM sales) T
WHERE "Day" <= T."DayC"
GROUP BY T."DayC"