我有一个查询要提取交易记录。我希望能够针对每个个案编号的任何交易,提取我的商品字段= A1和newvalue字段<> A1的交易。换句话说,我有2个案例编号,每个案例编号有5个交易,一个案例编号的交易记录为商品= A1和newvalue = A1。另一种情况有一条记录,其中商品= A1和newvalue = B2,这是我想在查询中返回的情况。请记住,前一种情况可能具有相同的事务,但由于有newvalue = A1的记录,因此不应返回该事务。我已附上一张图片,并以黄色突出显示的记录是我期望的输出结果。以下是我当前的“在哪里”声明,我需要重写帮助。有人还告诉我,我可能需要“ Group BY”语句,但我尝试过但仍得出相同的结果。
SELECT
Allcases.caseno as caseno, Allcases.division_desc as division_desc, Allcases.close_date as close_date, Allcases.week_of as week_of,
Allcases.case_type as case_type,
a.transactdate as transactdate, a.transacttypeid as transacttypeid, a.userid as userid,
concat(RTRIM(Usr.fullname), ' <', RTRIM(Usr.EmailAddress), '>') as CR1_CR2_FULLNAME,
Allcases.commodity as commodity,
b.oldvalue as oldvalue, b.newvalue as newvalue, changereason as changereason
FROM
(
select b.*, sum(case when b.newvalue = 'A1' then 1 else 0 end) over(partition by Allcases.caseno) cnt_new_value_A1
from
dataiku.qca_casedatachange_parquet b
INNER JOIN dataiku.qcatransact_parquet a
ON b.transactid = a.transactid
INNER JOIN dataiku.qca_validated_cases_consolidated_parquet Allcases
ON a.casedataid = Allcases.casedataid
INNER JOIN dataiku.set_qca_reclassification_head_parquet h
ON Allcases.caseno = h.caseno
INNER JOIN dataiku.qca_user_parquet Usr
ON a.UserID = Usr.UserID
where
b.FieldID = 6
AND a.transacttypeid IN (1, 2, 3)
AND Allcases.commodity = 'A1'
)s
where cnt_new_value_A1 = 0
ORDER BY Allcases.caseno, A.transactid
答案 0 :(得分:0)
如果您不希望返回不存在b.newvalue ='A1'记录的个案,则计算分析sum()并将其用于where
select ...
from
(
select t.*,
sum(case when newvalue ='A1' then 1 else 0 end) over(partition by case_number) cnt_new_value_A1
from ...
where
FieldID = 6 --COMMODITY
AND transacttypeid IN (1, 2, 3)
AND commodity = 'A1'
)s
where cnt_new_value_A1 = 0 --No A1 in newvalue per case_number