Меня беспокоят 2 таблицы AUF_KOPF
- это заголовок заказа и AUF_POS
- это элементы заказа.Как выполнить сложные MAX() и GROUP BY в Oracle SQL?
Я хочу получить максимальную последнюю дату, когда продукт использовался для заказа в заказе. Идентификатор продукта хранится в AUF_POS.GLAS1
, AUF_POS.GLAS2
или AUF_POS.GLAS3
.
Я создал этот запрос, который только проверяет AUF_POS.GLAS1
:
Select Max(AUF_KOPF.ERFASS_DAT),
AUF_POS.GLAS1
From AUF_KOPF AUF_KOPF
Inner Join AUF_POS AUF_POS On AUF_KOPF.AUF_NR = AUF_POS.AUF_NR
Group By AUF_POS.GLAS1
Order By AUF_POS.GLAS1
Результатов:
MAX(AUF_KOPF.ERFASS_DAT) GLAS1
07/11/2016 1
06/11/2016 2
03/11/2016 3
09/11/2016 4
07/11/2016 5
Проблема заключается в том, что продукт ID 1
может быть использованы позже, чем 07/11/2016
в другом месте в порядке AUF_POS.GLAS2
или AUF_POS.GLAS3
.
Это можно сделать OR
, или что это лучший способ написать это? Я хотел бы держаться подальше от наличия 3 SELECT
, а затем слияния их, поскольку это кажется грязным.
Пример AUF_KOPF
строки:
AUF_NR ERFASS_DAT
1609183 06/01/2016
1609184 06/01/2016
1609185 06/01/2016
1609187 06/01/2016
1609188 06/01/2016
Пример AUF_POS
строки:
AUF_NR AUF_POS GLAS1 GLAS2 GLAS3
1609183 4 4 9 0
1609184 5 4 9 0
1609185 6 4 9 0
1609187 7 4 9 0
1609188 8 4 9 0
Желаемый выход в данном случае было бы показать все продукты, как 06/01/2016
, но с большим количеством данных, которые он будет показывать последнюю дату, на любая позиция, в которой использовался идентификатор продукта.
@mathguy Это не опечатка, это необходимо для объединения. – sagi
Ух, извините, вы правы. Я не знаю, о чем я думал! (На самом деле, я думал, что вы идете с квалифицированными именами, как у него в оригинале .... но все же) – mathguy
Все в порядке, эти имена вызывают путаницу, колоны, псевдонимы и таблицы, все вызываемые с тем же именем, даже я заблудился в своем собственном коде: P @mathguy – sagi