获取12个月中每个月(直到该月)的数据

时间:2019-07-25 12:46:45

标签: sql oracle

我尝试使用查询通过“明细表”获取容器,文件文件夹的项目计数(进/出)。

例如: 现在本月是2019年7月。 根据快照表,我们将获得2019年7月(<= 2019年7月)和6月(<= 2019年6月)的数据。

但是在详细表格中,现在我们的查询只提供了2019年7月的计数,但是我们需要直到2019年7月的数据(即。<= 2019年7月)。

必填: 同样,我们需要2019年7月,2019年6月..到2018年7月(12个月趋势)的每个月的数据。

SELECT CASE
       WHEN gdw.dim_strg_itm.rfid_stat_id = 1
          AND gdw.dim_strg_itm_tp.strg_itm_ctgry_dsc = 'CONTAINER'
          AND strg_itm_nw_stat_key IN (16004, 16000) THEN
        COUNT(strg_itm_nw_stat_key)
     END "CNT",
     CASE
       WHEN gdw.dim_strg_itm.rfid_stat_id = 2
          AND gdw.dim_strg_itm_tp.strg_itm_ctgry_dsc = 'CONTAINER'
          AND strg_itm_nw_stat_key IN (16004, 16000) THEN
        COUNT(strg_itm_nw_stat_key)
     END "NCNT",
     gdw.dim_dt.mo_yr_cd
FROM   gdw.dim_dt dim_dt_fclty_srvc,
     gdw.dim_cust_acnt,
     gdw.dim_cust_dept,
     gdw.dim_strg_itm,
     gdw.dim_strg_itm_stat,
     gdw.dim_dt,
     gdw.fact_rim_itm_actvty_dtl,
     gdw.dim_strg_itm_tp
WHERE  gdw.fact_rim_itm_actvty_dtl.actvty_dt_key || fact_rim_itm_actvty_dtl.dim_actvty_key || gdw.fact_rim_itm_actvty_dtl.actvty_tm_key =
     (SELECT MAX(actvty_dt_key || dim_actvty_key || actvty_tm_key)
      FROM   gdw.fact_rim_itm_actvty_dtl a1
      INNER  JOIN gdw.dim_dt dt
      ON     a1.actvty_dt_key = dt.dim_dt_key
      WHERE  gdw.fact_rim_itm_actvty_dtl.dim_strg_itm_key = a1.dim_strg_itm_key
      AND    gdw.fact_rim_itm_actvty_dtl.dim_cust_acnt_key = a1.dim_cust_acnt_key
      AND    gdw.fact_rim_itm_actvty_dtl.dim_cust_dept_key = a1.dim_cust_dept_key
      AND    a1.strg_itm_nw_stat_key <> -1
      AND    dt.clndr_dt <= '02-FEB-2019')
AND    (gdw.fact_rim_itm_actvty_dtl.actvty_dt_key = dim_dt_fclty_srvc.dim_dt_key)
AND    (gdw.fact_rim_itm_actvty_dtl.dim_strg_itm_key = gdw.dim_strg_itm.dim_strg_itm_key)
AND    (gdw.dim_cust_acnt.dim_cust_key = gdw.fact_rim_itm_actvty_dtl.dim_cust_acnt_key)
AND    (gdw.fact_rim_itm_actvty_dtl.dim_cust_dept_key = gdw.dim_cust_dept.dim_cust_dept_key)
AND    (gdw.fact_rim_itm_actvty_dtl.strg_itm_nw_stat_key = gdw.dim_strg_itm_stat.dim_strg_itm_stat_key)
AND    (gdw.fact_rim_itm_actvty_dtl.actvty_dt_key = gdw.dim_dt.dim_dt_key)
AND    (gdw.dim_strg_itm.strg_itm_tp_cd = gdw.dim_strg_itm_tp.strg_itm_tp_cd)
AND    (gdw.dim_cust_acnt.cust_id IN '7y897451'
    --@Prompt('Account:','A','Customer\Customer Account\Level 1 Account Code',Multi,Free,Persistent,,User:0)
    AND (gdw.dim_cust_acnt.src_sys_cd = 'RSSQL' AND substr(cust_id, 1, 2) IN ('ON', 'RP', 'RE', 'RL', 'PR', 'PL', 'LC', 'LE', 'PT', 'RR')) AND
    gdw.dim_cust_acnt.src_sys_cd IN ('RSSQL'))
GROUP  BY gdw.dim_strg_itm.rfid_stat_id,
        gdw.dim_strg_itm_tp.strg_itm_ctgry_dsc,
        strg_itm_nw_stat_key,
        gdw.dim_dt.mo_yr_cd
ORDER  BY to_date(gdw.dim_dt.mo_yr_cd, 'Mon YYYY') DESC

例如:2019年1月数据(小于或等于2019年1月的所有月数据之和),类似地,2019年2月(数据总和<= 2019年2月)。这样12个月。

1 个答案:

答案 0 :(得分:1)

在我看来,目标似乎是按月创建运行总计。下面是一个示例,说明如何使用制造的示例数据在Oracle中完成此操作。

WITH fact_data (trx_date, qty)
AS
(
  SELECT DATE '2019-05-01', 10 FROM dual UNION ALL
  SELECT DATE '2019-05-15', 5 FROM dual UNION ALL
  SELECT DATE '2019-05-17', 10 FROM dual UNION ALL
  SELECT DATE '2019-06-04', 20 FROM dual UNION ALL
  SELECT DATE '2019-06-15', 5 FROM dual UNION ALL
  SELECT DATE '2019-06-30', 10 FROM dual UNION ALL
  SELECT DATE '2019-07-01', 5 FROM dual UNION ALL
  SELECT DATE '2019-07-15', 5 FROM dual UNION ALL
  SELECT DATE '2019-07-20', 5 FROM dual
)
SELECT TO_CHAR(TRUNC(trx_date, 'MONTH'), 'fmMonth YYYY') month,
       SUM(SUM(qty)) OVER (ORDER BY TRUNC(trx_date, 'MONTH') ) qty_to_date
  FROM fact_data
  GROUP BY TRUNC(trx_date, 'MONTH') 
  ORDER BY TRUNC(trx_date, 'MONTH');

 MONTH        QTY_TO_DATE
------------ -----------
May 2019              25
June 2019             60
July 2019             75