SQL возвращает строки по самой высокой дате - PullRequest
2 голосов
/ 20 мая 2019

У меня проблемы с получением строк по максимальной дате с количеством продукта

Вот таблица продуктов

SupplierCode    Reference   Qty
1000            M131200     500
1111            M131200     1
1000            M131300     200
1111            M131300     500

и вот таблица заказов

SupplierCode    Reference   OrderDate
1000            M131200     2019-01-09 00:00:00.000
1111            M131200     2018-07-25 00:00:00.000
1000            M131200     2019-01-15 00:00:00.000
1000            M131200     2019-01-21 00:00:00.000
1111            M131200     2019-01-02 00:00:00.000
1111            M131300     2019-02-05 00:00:00.000
1000            M131300     2019-03-05 00:00:00.000
1000            M131300     2019-04-07 00:00:00.000
1111            M131300     2019-02-04 00:00:00.000

Все, что мне нужно, это вернуть количество продукта на одну ссылку, чтобы я мог присоединиться к другой таблице. Проблема в том, что существует более одного поставщика, поэтому ссылки на мой окончательный запрос приведут к дублированию результатов, поскольку одна ссылка может иметь более одного поставщика.

Мне удалось получить самую последнюю дату для каждого поставщика

SELECT
    O.SupplierCode,
    O.Reference,
    MAX(OrderDate) AS Date
FROM 
    Orders O
GROUP BY 
    O.SupplierCode,
    O.Reference

, который возвращает это

SupplierCode    Reference   Date
1000            M131200     2019-01-21 00:00:00.000
1111            M131200     2019-01-02 00:00:00.000
1000            M131300     2019-04-07 00:00:00.000
1111            M131300     2019-02-05 00:00:00.000

Так что теперь мне нужно выбрать поставщика с самой последней датой для каждой ссылки

Например, конечный результат, который я ищу, это, конечно, быстрее, если объединить обе таблицы:

SupplierCode    Reference   Qty Date
1000            M131200     500 2019-01-21 00:00:00.000
1000            M131300     200 2019-04-07 00:00:00.000

Но я не уверен, как мне следует проверить дату на where пункте

1 Ответ

2 голосов
/ 21 мая 2019

Вы можете выбрать последнего поставщика для каждой ссылки, используя ROW_NUMBER ():

with maxOrder as 
(
    select
        *
        , ROW_NUMBER() OVER (PARTITION BY Reference ORDER BY OrderDate DESC) as number
    from Orders
)
Select
     o.SupplierCode
    ,o.Reference
    ,p.Qty
    ,o.OrderDate
from maxOrder as o
join Products as p
    on p.SupplierCode = o.SupplierCode
    and p.Reference = o.Reference
where o.number = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...