为日期列的每个值计算特定列的新的不同值

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