我尝试使用查询通过“明细表”获取容器,文件文件夹的项目计数(进/出)。
例如: 现在本月是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个月。
答案 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