Для проекта я хочу создать прейскурант. Я хочу получить только последние цены от каждого поставщика за каждую статью.SQL выберите только самую высокую дату
Есть только эти две таблицы.
Table articles
ARTNR | TXT | ACTIVE | SUPPLIER
------------------------------------------
10 | APPLE | Y | 10
20 | ORANGE | Y | 10
30 | KEYBOARD | N | 20
40 | ORANGE | Y | 20
50 | BANANA | Y | 10
60 | CHERRY | Y | 10
Table prices
ARTNR | PRCGRP | PRCDAT | PRICE
--------------------------------------
10 | 10 | 01-Aug-10 | 2.1
10 | 10 | 05-Aug-11 | 2.2
10 | 10 | 21-Aug-12 | 2.5
20 | 0 | 01-Aug-10 | 2.1
20 | 10 | 09-Aug-12 | 2.3
10 | 10 | 14-Aug-13 | 2.7
Это то, что я до сих пор:
SELECT
ARTICLES.[ARTNR], ARTICLES.[TXT], ARTICLES.[ACTIVE], ARTICLES.[SUPPLIER], PRICES.PRCGRP, PRICES.PRCDAT, PRICES.PRICE
FROM
ARTICLES INNER JOIN PRICES ON ARTICLES.ARTNR = PRICES.ARTNR
WHERE
(
(ARTICLES.[ACTIVE]="Y") AND
(ARTICLES.[SUPPLIER]=10) AND
(PRICES.PRCGRP=0) AND
(PRICES.PRCDAT=(SELECT MAX(PRCDAT) FROM PRICES as art WHERE art.ARTNR = PRICES.artnr))
)
ORDER BY ARTICLES.ARTNR
;
Это нормально выбрать только один поставщик каждый раз, но я хочу максимальную цену.
Проблема заключается в том: Много статей не отображаются с запросом выше, , но я не могу понять, что это неправильно.
Я вижу, что они должны быть в результирующем наборе, когда я не рассматриваю подзаголовок на max prcdat.
Что не так?
Изменить 'WHERE art.ARTNR = PRICES.artnr' to' WHERE art.ARTNR = ARTICLES.artnr' – Mihai
@Mihai Спасибо за ваш комментарий. Пробовал это, но имел тот же результат с отсутствующими статьями. –
Один простой способ - повторить условия WHERE в подзапросе. – Mihai