使用DB2 SQL,我需要提取过去12个整周的数据。 (此报告将每周运行一次,而我每周需要过去12个整周的时间来提取该报告)。我需要将周数设置为柱状格式,并每周计数一次。所以有两个问题:我不确定过去12周的表现如何。而且我不确定如何在自己的专栏中获得这些周的服务。
所需样本输出:
ACCOUNT WEEK1_CT WEEK2_CT WEEK3_CT.... WEEK12_CT
123 2 2 3 5
789 6 3 6 6
333 18 20 15 20
具有逻辑的示例查询,我试图用来拉回过去12个整周的时间。收到错误消息:“ WEEK”在使用上下文中无效。但是,不确定这是否是正确的路径。
SELECT
C.ACCOUNT_NUM,
DATEPART(WEEK,D.LST_SENT_DT) AS WEEK,
COUNT(DISTINCT A.SPECIMEN_NUM) AS COUNT
FROM
FACT A,
FIN_ORG B,
ACCOUNT C,
DATE D
WHERE
A.FINANCIAL_SRGT = B.FINANCIAL_SRGT AND
A.CLIENT_SRGT = C.CLIENT_SRGT AND
A.LST_SENT_DT_SRGT = D.LST_SENT_DT_SRGT AND
B.DIVISION_NUM = 'W' AND
datepart(week, D.LST_SENT_DT) between (date_trunc('week', current_date)
-12)
AND date_trunc('week', current_date)
GROUP BY
C.ACCOUNT_NUM, DATEPART(WEEK, D.LST_SENT_DT)
DATE表中的样本表数据:
LST_SENT_YR LST_SENT_MTH_NUM LST_SENT_WK LST_SENT_DT
2019 1 3 1/16/2019
2019 1 4 1/24/2019
2019 4 14 4/2/2019
2019 4 14 4/6/2019
WITH
T (WEEK_NUM, WEEK_END_DT) AS
(
VALUES (1, DATE('2020-01-02') - DAYOFWEEK_ISO(DATE('2020-01-02')))
UNION ALL
SELECT WEEK_NUM + 1, WEEK_END_DT - 7
FROM T
WHERE WEEK_NUM < 12
)
, WEEKS AS
(
SELECT WEEK_NUM, WEEK_END_DT - 6 AS WEEK_START_DT, WEEK_END_DT
FROM T
)
, ACCOUNT_INFO (ACCOUNT, DT, CT) AS
(
VALUES
(1, DATE('2019-12-25'), 5)
, (1, DATE('2019-12-26'), 10)
, (2, DATE('2019-12-01'), 20)
)
SELECT
D.ACCOUNT
, SUM(CASE W.WEEK_NUM WHEN 1 THEN A.CT ELSE 0 END) AS WEEK1_CT
, SUM(CASE W.WEEK_NUM WHEN 2 THEN A.CT ELSE 0 END) AS WEEK2_CT
, SUM(CASE W.WEEK_NUM WHEN 3 THEN A.CT ELSE 0 END) AS WEEK3_CT
, SUM(CASE W.WEEK_NUM WHEN 4 THEN A.CT ELSE 0 END) AS WEEK4_CT
, SUM(CASE W.WEEK_NUM WHEN 5 THEN A.CT ELSE 0 END) AS WEEK5_CT
, SUM(CASE W.WEEK_NUM WHEN 6 THEN A.CT ELSE 0 END) AS WEEK6_CT
, SUM(CASE W.WEEK_NUM WHEN 7 THEN A.CT ELSE 0 END) AS WEEK7_CT
, SUM(CASE W.WEEK_NUM WHEN 8 THEN A.CT ELSE 0 END) AS WEEK8_CT
, SUM(CASE W.WEEK_NUM WHEN 9 THEN A.CT ELSE 0 END) AS WEEK9_CT
, SUM(CASE W.WEEK_NUM WHEN 10 THEN A.CT ELSE 0 END) AS WEEK10_CT
, SUM(CASE W.WEEK_NUM WHEN 11 THEN A.CT ELSE 0 END) AS WEEK11_CT
, SUM(CASE W.WEEK_NUM WHEN 12 THEN A.CT ELSE 0 END) AS WEEK12_CT
FROM WEEKS AS W, (SELECT DISTINCT ACCOUNT FROM ACCOUNT_INFO) D
LEFT JOIN ACCOUNT_INFO A ON A.DT BETWEEN W.WEEK_START_DT AND W.WEEK_END_DT AND A.ACCOUNT = D.ACCOUNT
GROUP BY D.ACCOUNT;
|ACCOUNT |WEEK1_CT |WEEK2_CT |WEEK3_CT |WEEK4_CT |WEEK5_CT |WEEK6_CT |WEEK7_CT |WEEK8_CT |WEEK9_CT |WEEK10_CT |WEEK11_CT |WEEK12_CT |
|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|
|1 |15 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |
|2 |0 |0 |0 |0 |20 |0 |0 |0 |0 |0 |0 |0 |
您可以按原样运行此查询。我们根据任何给定的日期生成过去12周的表格WEEKS,格式为:Week_number, Monday_Date, Sunday_Date
然后,我们将此表与帐户,日期和要汇总的列(CT)结合到表(ACCOUNT_INFO)中。最后,我们根据帐户对结果进行分组。