2012-07-18 144 views
0

我的初始查詢看起來是這樣的:填充缺少的日期DB2 SQL

select process_date, count(*) batchCount 
from T1.log_comments 
order by process_date asc; 

我需要能夠爲那些缺少週末做一些快速的分析,而是想知道是否有一個快速的方法來填寫process_date中不存在的缺失日期。

我已經看到了解決方案here但我很好奇,如果有任何隱藏在db2中的魔法可以做到這一點,只需對我的原始查詢進行小修改。

+0

確實DB2測試有一個功能生成值的序列? (postgres的generate_series()可以用來構造日曆表) – wildplasser 2012-07-18 19:08:00

+0

它的確如此,但僅用於整數,而不是日期。 – avgvstvs 2012-07-20 15:09:05

回答

1

注意:未經測試,根據我對SQL Server/Oracle的暴露情況進行了構建。我想這雖然給你的想法: *現在修訂和DB2 *

WITH MaxDateQry(MaxDate) AS 
(
    SELECT MAX(process_date) FROM T1.log_comments 
), 
MinDateQry(MinDate) AS 
(
    SELECT MIN(process_date) FROM T1.log_comments 
), 
DatesData(ProcessDate) AS 
(
    SELECT MinDate from MinDateQry 
    UNION ALL 
    SELECT (ProcessDate + 1 DAY) FROM DatesData WHERE ProcessDate < (SELECT MaxDate FROM MaxDateQry) 
) 
SELECT a.ProcessDate, b.batchCount 
    FROM DatesData a LEFT JOIN 
    (
     SELECT process_date, COUNT(*) batchCount 
     FROM T1.log_comments 
    ) b 
    ON a.ProcessDate = b.process_date 
ORDER BY a.ProcessDate ASC;