[英]Oracle - Distinct with a Group by date
我在Oracle 11g數據庫中有一個這樣的表
TABLE REC REC_ID NUMBER CARD_ID NUMBER REC_STATUS NUMBER REC_DATE TIMESTAMP
我想知道在給定期間內已充值多少張卡,但是我希望此信息按日期分組。 如果card_id已在某一日期計算,則不應在下一個日期計算(區別)。
這里一些測試數據
with REC ( REC_ID, CARD_ID, REC_STATUS, REC_DATE ) as ( select '1', '100', '1', SYSTIMESTAMP - 5 from dual union all select '2', '100', '1', SYSTIMESTAMP - 5 from dual union all select '3', '200', '1', SYSTIMESTAMP - 5 from dual union all select '4', '100', '1', SYSTIMESTAMP - 4 from dual union all select '5', '300', '1', SYSTIMESTAMP - 4 from dual union all select '6', '200', '1', SYSTIMESTAMP - 4 from dual union all select '7', '100', '1', SYSTIMESTAMP - 3 from dual union all select '8', '400', '1', SYSTIMESTAMP - 3 from dual union all select '9', '400', '1', SYSTIMESTAMP - 3 from dual union all select '10', '400', '1', SYSTIMESTAMP - 2 from dual union all select '11', '300', '1', SYSTIMESTAMP - 2 from dual union all select '12', '100', '1', SYSTIMESTAMP - 2 from dual union all select '13', '400', '1', SYSTIMESTAMP - 2 from dual ) -- end of test data
當我執行這樣的查詢時,我的總數為4,這是正確的。
SELECT COUNT(DISTINCT CARD_ID) COUNT FROM REC WHERE REC_STATUS = 1
結果
|COUNT| | 4 |
但是,當我嘗試這種方式時,我的總數為10。這是因為當我在日期上使用“ group by”並在ID中使用“ distinct”時,區別僅適用於分組日期,不是整個時期。
SELECT TRUNC(REC_DATE) DAT, COUNT(DISTINCT CARD_ID) COUNT FROM REC WHERE REC_STATUS = 1 GROUP BY TRUNC(REC_DATE)
結果
DAT | COUNT 14/06/19 | 2 13/06/19 | 3 15/06/19 | 3 12/06/19 | 2
我該怎么做才能將差異應用於期間總計,並且仍按日期保留分組?
也許您只想要每張卡的最早日期:
SELECT TRUNC(MIN_REC_DATE) as DAT,
COUNT(*) as COUNT
FROM (SELECT CARD_ID, MIN(REC_DATE) as MIN_REC_DATE
FROM REC
WHERE REC_STATUS = 1
GROUP BY CARD_ID
) R
GROUP BY TRUNC(MIN_REC_DATE);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.