SQL - Group By 2字段,其中Count大于X.

时间:2015-10-19 15:58:17

标签: sql teradata

我正在尝试找到编写此查询的正确有效方法。对于销售数据集,我想在一个月内隔离超过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

非常感谢任何帮助!

0 个答案:

没有答案