2017-08-30 32 views
0

行的最大計數我有如下表:取得每個小時

SELECT COUNT(*), EXTRACT(HOUR FROM EXPIRY_DATE), EXTRACT(DAY FROM EXPIRY_DATE) 
FROM TABLE1 
GROUP BY EXTRACT(HOUR FROM EXPIRY_DATE), EXTRACT(DAY FROM EXPIRY_DATE) 
ORDER BY EXTRACT(DAY FROM EXPIRY_DATE); 

"ITEMS" "EXPIRY_DATE" 
1   30-AUG-17 07.00.00.000000000 AM 
1   30-AUG-17 07.15.22.706000000 AM 
1   30-AUG-17 07.44.51.794000000 AM 
1   30-AUG-17 08.57.11.426000000 AM 
1   30-AUG-17 09.57.24.810000000 AM 
1   31-AUG-17 06.57.34.236000000 AM 
1   31-AUG-17 06.57.42.121000000 AM 
1   31-AUG-17 07.57.48.978000000 AM 

然後,我使用下面的查詢獲取行count(每日常小時)使用上述樣本數據上面查詢的結果是:

"COUNT(*)" "EXTRACT(HOURFROMEXPIRY_DATE)" "EXTRACT(DAYFROMEXPIRY_DATE)" 
3 7 30 
1 8 30 
1 9 30 
2 6 31 
1 7 31 

我怎麼能返回的行最大計數每天每小時?我的意思是,我想下面的輸出:

"COUNT(*)" "MAX hour" "DAY" 
3 7 30 
2 6 31 

回答

1

使用HAVING

SELECT COUNT(*), EXTRACT(HOUR FROM EXPIRY_DATE) eh, EXTRACT(DAY FROM EXPIRY_DATE) ed 
FROM TABLE1 
GROUP BY EXTRACT(HOUR FROM EXPIRY_DATE), EXTRACT(DAY FROM EXPIRY_DATE) 
HAVING COUNT(*) >= ALL 
(
    SELECT COUNT(*) 
    FROM TABLE1 t2 
    WHERE EXTRACT(DAY FROM t2.EXPIRY_DATE) = EXTRACT(DAY FROM table1.EXPIRY_DATE) 
    GROUP BY EXTRACT(HOUR FROM t2.EXPIRY_DATE), 
) 
+0

感謝您的幫助,它的工作原理。 –

+0

@MGCR7你很好 –

1

使用RANK

SELECT 
    t.cnt, 
    t.hour, 
    t.day 
FROM 
(
    SELECT 
     COUNT(*) AS cnt, 
     EXTRACT(HOUR FROM EXPIRY_DATE) AS hour, 
     EXTRACT(DAY FROM EXPIRY_DATE) AS day, 
     RANK() OVER (PARTITION BY EXTRACT(DAY FROM EXPIRY_DATE) 
        ORDER BY COUNT(*) DESC) rank 
    FROM TABLE1 
    GROUP BY EXTRACT(HOUR FROM EXPIRY_DATE), EXTRACT(DAY FROM EXPIRY_DATE) 
) t 
WHERE t.rank = 1 
ORDER BY t.day; 
+0

感謝您的幫助,它的工作原理。 –