为日期列的每个值计算特定列的新的不同值
Counting new distinct values of a certain column for each value of a date column
我有一个包含四列的 table,如下所示:
id,name, key, date
1,'A' ,'x1','2015-11-11'
2,'A' ,'x1','2015-11-11'
3,'B' ,'x2','2015-11-11'
4,'B' ,'x2','2015-11-11'
5,'A' ,'x1','2015-11-12'
6,'A' ,'x1','2015-11-12'
7,'B' ,'x2','2015-11-12'
8,'B' ,'x2','2015-11-12'
9,'D' ,'x3','2015-11-12'
我想计算每个 date
:
的不同 new key
-s 的数量
2015-11-11 2 -- (two distinct keys: x1 and x2)
2015-11-12 1 -- (one new key: x3)
我该怎么做?
SELECT DATE, EXACT_COUNT_DISTINCT(key) AS keys
FROM (
SELECT DATE, key, LEAD(DATE) OVER(PARTITION BY key ORDER BY DATE DESC) AS new
FROM (SELECT DATE, key FROM YourTable GROUP BY DATE, key)
) WHERE new IS NULL
GROUP BY DATE
ORDER BY DATE
即使未检测到新密钥,以下版本也会保留日期。
只是包装第一个答案
SELECT dates.date AS DATE, IFNULL(CAST(keys AS INTEGER), 0) AS keys
FROM (
SELECT DATE, EXACT_COUNT_DISTINCT(key) AS keys
FROM (
SELECT DATE, key, LEAD(DATE) OVER(PARTITION BY key ORDER BY DATE DESC) AS new
FROM (SELECT DATE, key FROM YourTable GROUP BY DATE, key
)
)
WHERE new IS NULL
GROUP BY DATE
) AS counts
RIGHT JOIN EACH (SELECT DATE FROM YourTable GROUP BY DATE) AS dates
ON dates.date = counts.date
ORDER BY DATE
我有一个包含四列的 table,如下所示:
id,name, key, date
1,'A' ,'x1','2015-11-11'
2,'A' ,'x1','2015-11-11'
3,'B' ,'x2','2015-11-11'
4,'B' ,'x2','2015-11-11'
5,'A' ,'x1','2015-11-12'
6,'A' ,'x1','2015-11-12'
7,'B' ,'x2','2015-11-12'
8,'B' ,'x2','2015-11-12'
9,'D' ,'x3','2015-11-12'
我想计算每个 date
:
key
-s 的数量
2015-11-11 2 -- (two distinct keys: x1 and x2)
2015-11-12 1 -- (one new key: x3)
我该怎么做?
SELECT DATE, EXACT_COUNT_DISTINCT(key) AS keys
FROM (
SELECT DATE, key, LEAD(DATE) OVER(PARTITION BY key ORDER BY DATE DESC) AS new
FROM (SELECT DATE, key FROM YourTable GROUP BY DATE, key)
) WHERE new IS NULL
GROUP BY DATE
ORDER BY DATE
即使未检测到新密钥,以下版本也会保留日期。 只是包装第一个答案
SELECT dates.date AS DATE, IFNULL(CAST(keys AS INTEGER), 0) AS keys
FROM (
SELECT DATE, EXACT_COUNT_DISTINCT(key) AS keys
FROM (
SELECT DATE, key, LEAD(DATE) OVER(PARTITION BY key ORDER BY DATE DESC) AS new
FROM (SELECT DATE, key FROM YourTable GROUP BY DATE, key
)
)
WHERE new IS NULL
GROUP BY DATE
) AS counts
RIGHT JOIN EACH (SELECT DATE FROM YourTable GROUP BY DATE) AS dates
ON dates.date = counts.date
ORDER BY DATE