HIVE SQL Запрос Где Заявление Помощь - PullRequest
0 голосов
/ 05 августа 2020

У меня есть запрос, из которого я получаю транзакции. Я хочу иметь возможность извлекать транзакции, где мое поле товара = A1 и поле newvalue <> A1 для любой транзакции для каждого отдельного номера дела. Другими словами, у меня есть 2 номера дела с 5 транзакциями в каждом, один номер дела имеет запись транзакции товар = A1 и новое значение = A1. В другом случае есть запись, где товар = A1 и новое значение = 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

1 Ответ

0 голосов
/ 05 августа 2020

Если вы не хотите возвращать случаи, для которых не существует записи с b.newvalue = 'A1', тогда вычислите analyti c 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...