SQL-запрос для группировки столбцов - PullRequest
0 голосов
/ 03 декабря 2018

Я выполняю запрос, из которого я хочу показать только отдельных клиентов.

В настоящее время я получаю записи, которые имеют несколько записей, например, 3 записи для элемента A0003.Я хочу вернуть только последнюю запись в последовательности.

Мой код:

select OJCUNO AS Item,OJPRRF as code,OJFVDT as From Date, OJLVDT as To Date
from M3FDBPRD.OPRICH 
WHERE
   OJCUNO in ( Select max(OJCUNO) FROM OPRICH group by OJCUNO )

Образец данных:

Item        Code    From Date       To Date
A0007       AD      20030301        20161231
A0008       AF      20030301        20161231
A0009       AL      20030301        20121229
A0009       AL      20030301        20121231

Ожидаемый результат:

Item        Code    From Date       To Date
A0007       AD      20030301        20161231
A0008       AF      20030301        20161231
A0009       AL      20030301        20121231

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Просто используйте row_number():

select OJCUNO AS Item, OJPRRF as code ,OJFVDT as FromDate, OJLVDT as ToDate
from (select o.*,
             row_number() over (partition by ojcuno order OJPRRF desc, OJLVDT desc) as seqnum
      from M3FDBPRD.OPRICH o
     ) o
where seqnum = 1;

Ваш подход, использующий коррелированный подзапрос, сработал бы, если бы вы использовали правильные столбцы:

select OJCUNO AS Item,OJPRRF as code, OJFVDT as FromDate, OJLVDT as ToDate
from M3FDBPRD.OPRICH 
where OJLVDT in ( Select max(OJLVDT) from OPRICH group by OJCUNO );
0 голосов
/ 03 декабря 2018

У меня просто удар здесь, потому что у меня нет доступа к базе данных DB2 для тестирования, но:

SELECT *
FROM
(
select OJCUNO AS Item,
OJPRRF as code,
OJFVDT as From Date,
OJLVDT as To Date,
ROW_NUMBER() OVER (PARTITION BY OJCUNO, OJPRRF ORDER BY OJFVDT DESC, OJLVDT DESC) AS RNum
from M3FDBPRD.OPRICH 
WHERE
   OJCUNO in ( Select max(OJCUNO) FROM OPRICH group by OJCUNO )
) a
WHERE a.RNum = 1
...