Выберите последнюю запись в каждой группе (с внутренним объединением) - PullRequest
0 голосов
/ 11 марта 2019

Существует таблица «События», которая содержит данные, как показано ниже:

 no  | qty | events
----------------------
001  | 10  | Printed
004  | 10  | Printed
007  | 10  | Printed
004  | 2   | Reprint

, и Существует таблица «Числа», которая содержит данные, как показано ниже:

start_no |   no   | serial | expiry_date
--------------------------------------------
001      |  001   | 9311   | 2019-03-03
001      |  002   | 9312   | 2019-03-03
001      |  003   | 9313   | 2019-03-03
004      |  004   | 9314   | 2019-03-06
004      |  005   | 9315   | 2019-03-06
004      |  006   | 9316   | 2019-03-06
007      |  007   | 9317   | 2019-03-10
007      |  008   | 9318   | 2019-03-10

Это запрос, который я использую:

SELECT start_no, n.no, n.serial, expiry_date, qty
FROM Numbers n
INNER JOIN Events e ON n.start_no = e.no
WHERE events='Printed'

Мне нужен запрос вернет следующий результат:

start_no |   no   | serial | expiry_date
--------------------------------------------
001      |  003   | 9313   | 2019-03-03
004      |  006   | 9316   | 2019-03-06
007      |  008   | 9318   | 2019-03-10

Как я могу это сделать?

Ответы [ 2 ]

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

использование row_number() оконная функция

select * from 
(SELECT start_no, n.no, w.serial, expiry_date, qty
,row_number() over(partition by start_no order by no desc) rn
FROM Numbers n
INNER JOIN Events e ON n.start_no = e.no
WHERE events='Printed'
) a where a.rn=1
0 голосов
/ 11 марта 2019

ise row_number()

select * from
(
SELECT start_no, n.no, w.serial, expiry_date, qty,
row_number() over(partition by start_no order by w.serial desc) as rn
FROM Numbers n INNER JOIN Events e ON n.start_no = e.no
WHERE events='Printed'
)A where rn=1
...