2011-01-26 34 views
2

我在Oracle中的查詢報告,看起來像這樣:如何使用pl/sql按星期彙總記錄?

SELECT TRUNC (created_dt) created_dt 
    , COUNT (*) AllClaims 
    , SUM(CASE WHEN filmth_cd in ('T', 'C') THEN 1 ELSE 0 END) CT 
    , SUM(CASE WHEN filmth_cd = 'W' THEN 1 ELSE 0 END) Web 
    , SUM(CASE WHEN filmth_cd = 'I' THEN 1 ELSE 0 END) Icon 
FROM claims c 
WHERE c.clsts_cd NOT IN ('IN', 'WD') 
    AND TRUNC (created_dt) between 
    to_date('1/1/2006', 'dd/mm/yyyy') AND 
    to_date('1/1/2100', 'dd/mm/yyyy') 
GROUP BY TRUNC (created_dt) 
ORDER BY TRUNC (created_dt) DESC; 

它返回這樣的數據:

Create_Dt AllClaims CT Web Icon 
1/26/2011 675   356 285 34 
1/25/2011 740   322 379 39 
... 

我需要的是一個結果集,總結所有的日常值的成每週價值。我對PL/SQL相當陌生,不知道從哪裏開始。

回答

4

喜歡的東西

SELECT TRUNC (created_dt, 'IW') created_dt 
    , COUNT (*) AllClaims 
    , SUM(CASE WHEN filmth_cd in ('T', 'C') THEN 1 ELSE 0 END) CT 
    , SUM(CASE WHEN filmth_cd = 'W' THEN 1 ELSE 0 END) Web 
    , SUM(CASE WHEN filmth_cd = 'I' THEN 1 ELSE 0 END) Icon 
FROM claims c 
WHERE c.clsts_cd NOT IN ('IN', 'WD') 
    AND TRUNC (created_dt) between 
    to_date('1/1/2006', 'dd/mm/yyyy') AND 
    to_date('1/1/2100', 'dd/mm/yyyy') 
GROUP BY TRUNC (created_dt, 'IW') 
ORDER BY TRUNC (created_dt, 'IW') DESC; 

將聚集基於ISO周的第一天的數據。

+0

+1非常好,很容易。 – 2011-01-26 16:23:13

0

下面是一個簡單的例子,我經常使用:

SELECT 
TO_CHAR(created_dt,'WW'), 
max(created_dt), 
COUNT(*) 
from MY_TABLE 
group by 
    TO_CHAR(created_dt,'WW'); 

的TO_CHAR(created_dt,「WW」)創建組,和最大(created_dt)顯示星期的最後一天。如果要顯示一週中的第一天,請使用min(created_dt)。