以下是如何将其应用到引用的示例中here http://www.bigdatamark.com/count-distinct-window-function-redshift,另外我还添加了另一行,复制“2015-01-01”的“表”,以演示如何计算不同值。
该示例的作者对解决方案的看法是错误的,但我只是使用他的示例。
create table public.test
(
"date" date,
item varchar(8),
measure int
)
insert into public.test
values
('2015-01-01', 'table', 12),
('2015-01-01', 'table', 120),
('2015-01-01', 'chair', 51),
('2015-01-01', 'lamp', 8),
('2015-01-02', 'table', 17),
('2015-01-02', 'chair', 72),
('2015-01-02', 'lamp', 23),
('2015-01-02', 'bed', 1),
('2015-01-02', 'dresser', 2),
('2015-01-03', 'bed', 1);
WITH x AS (
SELECT
*,
DENSE_RANK()
OVER (PARTITION BY date
ORDER BY item) AS dense_rank
FROM public.test
)
SELECT
"date",
item,
measure,
max(dense_rank)
OVER (PARTITION BY "date")
FROM x
ORDER BY 1;
CTE 为您提供dense每个日期每个项目的排名,然后主查询会获取每个日期的密集排名的最大值,即每个日期的项目的不同计数。
你需要dense排名而不是直接排名来计算不同值。