Сценарий Терадата - PullRequest
       30

Сценарий Терадата

0 голосов
/ 19 марта 2019

Дано: -

Когда DML_OPeration имеет значение «I», то B = 0 Когда DML_OPeration равно «D», тогда B будет содержать значение A вставленной записи

Условие: -

  1. если COUNT OF 'I' = Количество 'D', то эти записи нам не нужны.Например: ID = 111
  2. Найти последнюю вставку ('I') DML_operation
    ID  A   B   DML_Operation
1   111 1   0   I
2   111 2   1   D
3   111 3   0   I
4   111 4   3   D
5   111 5   0   I
6   111 6   5   D
7   111 7   0   I
8   222 8   0   I
9   333 9   0   I
10  333 10  9   D
11  444 11  0   I
12  444 12  11  D
13  444 13  0   I
14  111 14  7   D
15  333 15  0   I
16  444 16  0   I
17  444 17  13  D

Желание Выход

ID  A   B   DML_Operation
-------------
222 8   0   I
333 15  0   I
444 16  0   I

Моя логика, котораяне работает

sel ID, Max(A) from xyz
group by ID
having count(c='I') <> COUNT(c='D')

Ответы [ 3 ]

0 голосов
/ 19 марта 2019

вы найдете как ниже

    select ID, Max(A) from xyz
    group by ID
    having sum(case when c='I' then 1 else 0 end) <> sum(case when c='D' then 1 else 0 end)
0 голосов
/ 19 марта 2019

Это найдет все 'I' строки без соответствия 'D' строка:

SELECT *
FROM mytab AS t1
WHERE DML_Operation = 'I'
AND NOT EXISTS
 ( SELECT *
   FROM mytab AS t2
   WHERE t2.id = t1.id
     AND t2.b = t1.a 
     AND DML_Operation = 'D'
 )
0 голосов
/ 19 марта 2019

Как насчет использования case?

select ID, Max(A)
from xyz
group by ID
having sum( case when c = 'I' then 1 else 0 end) <> sum(case when c = 'D' then 1 else 0 end)

Или:

having sum(case when c = 'I' then 1
                when c = 'D' then -1
                else 0
           end) <> 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...