为日期列和 3 个键的每个值计算特定列的不同值

Counting distinct values of a certain column for each value of a date column and 3 key

我有一个包含四列的 table,如下所示:

id,name, key1, key2, key3, date
 1,'A' ,'x1','y1','z1','2015-11-11'
 2,'A' ,'x1','y2','z1','2015-11-11'
 3,'B' ,'x1','y2','z1','2015-11-11'
 4,'B' ,'x1','y1','z2','2015-11-11'
 5,'A' ,'x1','y1','z1','2015-11-12'
 6,'A' ,'x1','y2','z3','2015-11-12'
 7,'B' ,'x2','y3','z3','2015-11-12'
 8,'B' ,'x2','y1','z4','2015-11-12'
 9,'D' ,'x2','y1','z4','2015-11-12'

我想计算每个 date:

的不同 new key1, key2, key3-s 的数量
2015-11-11  3                     -- (two distinct key1, key2, key3 row 2,3)
2015-11-12  3                     -- (new key and distinct key1, key2, key3)

我该怎么做?

假设你的钥匙没有 |它们里面的字符(如果不是这种情况,请选择另一个字符:

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, CONCAT(key1, '|', key2, '|', key3) AS key 
        FROM YourTable GROUP BY 1,2)
) WHERE new IS NULL
GROUP BY DATE 
ORDER BY DATE

如您所见,这只是对我对您之前问题的回答的轻微采纳。我将所有三个键合二为一 - 并应用了与之前完全相同的代码