Teradata - 聚合时消除重复条目
Teradata -Duplicate entries elimination while aggregating
我试图在汇总数据时消除重复项。
CREATE TABLE abc
( dt DATE FORMAT 'YYYY-MM-DD'
,acct NUMBER
,chk_lmt VARCHAR(10)
,baln_lmt VARCHAR(10)
,wk DATE FORMAT 'YYYY-MM-DD'
) ;
INSERT INTO abc
('2018-03-19' , 1001, 'under 1000' , 'under 500', '2018-03-23');
INSERT INTO abc
('2018-03-20' , 1001, 'under 1000' , 'under 500', '2018-03-23');
INSERT INTO abc
('2018-03-20' , 1002, 'under 1000' , 'under 500', '2018-03-23');
SELECT dt,wk,'chk_lmt_chk' AS TYPEs,
SUM ( CASE WHEN chk_lmt = 'under 1000' THEN 1 ELSE 0 END ) AS counts
FROM abc
GROUP BY 1,2,3;
dt wk TYPEs counts
19/03/2018 23/03/2018 chk_lmt_chk 1
19/03/2018 23/03/2018 chk_lmt_chk 0
20/03/2018 23/03/2018 chk_lmt_chk 2
对于 dt 20/03/2018,计数应为 1,因为帐户已在 19/03/2018 中捕获。
有什么想法吗?
谢谢
这回答了原始问题。
如果你想让账户只统计一次,第一次,使用row_number()
:
SELECT dt, wk, 'chk_lmt_chk' AS TYPEs,
SUM(CASE WHEN chk_lmt = 'under 1000' THEN 1 ELSE 0 END) AS counts
FROM (SELECT abc.*,
ROW_NUMBER() OVER (PARTITION BY acct ORDER BY dt) as seqnum
FROM ptemp.abc
) abc
WHERE seqnum = 1
GROUP BY 1, 2, 3;
我试图在汇总数据时消除重复项。
CREATE TABLE abc
( dt DATE FORMAT 'YYYY-MM-DD'
,acct NUMBER
,chk_lmt VARCHAR(10)
,baln_lmt VARCHAR(10)
,wk DATE FORMAT 'YYYY-MM-DD'
) ;
INSERT INTO abc
('2018-03-19' , 1001, 'under 1000' , 'under 500', '2018-03-23');
INSERT INTO abc
('2018-03-20' , 1001, 'under 1000' , 'under 500', '2018-03-23');
INSERT INTO abc
('2018-03-20' , 1002, 'under 1000' , 'under 500', '2018-03-23');
SELECT dt,wk,'chk_lmt_chk' AS TYPEs,
SUM ( CASE WHEN chk_lmt = 'under 1000' THEN 1 ELSE 0 END ) AS counts
FROM abc
GROUP BY 1,2,3;
dt wk TYPEs counts
19/03/2018 23/03/2018 chk_lmt_chk 1
19/03/2018 23/03/2018 chk_lmt_chk 0
20/03/2018 23/03/2018 chk_lmt_chk 2
对于 dt 20/03/2018,计数应为 1,因为帐户已在 19/03/2018 中捕获。
有什么想法吗?
谢谢
这回答了原始问题。
如果你想让账户只统计一次,第一次,使用row_number()
:
SELECT dt, wk, 'chk_lmt_chk' AS TYPEs,
SUM(CASE WHEN chk_lmt = 'under 1000' THEN 1 ELSE 0 END) AS counts
FROM (SELECT abc.*,
ROW_NUMBER() OVER (PARTITION BY acct ORDER BY dt) as seqnum
FROM ptemp.abc
) abc
WHERE seqnum = 1
GROUP BY 1, 2, 3;