我正在尝试找到编写此查询的正确有效方法。对于销售数据集,我想在一个月内隔离超过4笔交易的客户,但有了这些,我想要了解销售的详细信息。
到目前为止写的是两个易失性表:T1)细节和T2)计数。 T1,将销售的所有细节放入易失性表中,T2根据商店,日期,时间,Trans_ID,收银员和TotalSale(分组)的标识符计算交易。有些交易会根据T1中的细节显示两次,所以我试图在不删除细节的情况下消除重复。
我的第三个查询查询T1对T2,其中T2中的Count大于1.
我认为这是有效的,但是,我不确定这是运行它的最有效方法,因为这样运行需要数小时。我可以做出哪些改变?代码粘贴在下面:
create volatile table IC_DTL as
(
SELECT DISTINCT
o.orgn_nm REGION
, o.str_org_nbr STORE
, d.sltrn_dt SLS_DATE
, cast(d.last_upd_ts as TIME) SLS_TIME
, d.pos_rgstr_id REGISTER
, d.sltrn_id TRANS_ID
, dp.user_id CASHIER_ID
, d.sltrn_line_nbr LINE_ITEM
, i.sub_class_nbr SUB_CLASS
, i.item_sc_desc SC_DESC
, i.item_sku_nbr SKU
, i.item_desc SKU_DESC
, d.ITEM_QTY QTY
, d.EXT_RETL_AMT EXT_RETAIL
, st.grs_sls_amt GROSS_SALE_AMT
, pc.s_paymt_meth_desc PAYMT_METH
, py.cardhldr_acct_nbr ACCT_NBR
FROM ALL MY TABLES (9 JOINS)
WHERE MY CONDITIONS
)
WITH DATA
ON COMMIT PRESERVE ROWS;
Create volatile table IC_COUNT as
(
select cashier_id, count(Trans_ID) as TOTAL
FROM IC_DETL
GROUP BY store, sls_date, sls_time, trans_id, cashier_id
,gross_sales_amt
)
WITH DATA
ON COMMIT PRESERVE ROWS;
select *
from IC_DTL D
JOIN IC_COUNT C
ON C.CASHIER_ID = D.CASHIER_ID
WHERE D.TOTAL >= 2
非常感谢任何帮助!