如何在一段时间 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 |
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"
我有一个原始 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.
上即时创建派生的 tableCREATE 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 |
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"