2016-11-09 2 views
2

Меня беспокоят 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, но с большим количеством данных, которые он будет показывать последнюю дату, на любая позиция, в которой использовался идентификатор продукта.

ответ

2

Вы можете использовать UNION ALL, которые не должны более усложнить (кроме более кода)

Select Max(AUF_KOPF.ERFASS_DAT), 
     AUF_POS.GLAS 
From AUF_KOPF 
    Inner Join (SELECT AUF_NR,GLAS1 as glas FROM AUF_POS UNION ALL 
       SELECT AUF_NR,GLAS2   FROM AUF_POS UNION ALL 
       SELECT AUF_NR,GLAS3   FROM AUF_POS) AUF_POS 
    On AUF_KOPF.AUF_NR = AUF_POS.AUF_NR 
Group By AUF_POS.GLAS 
Order By AUF_POS.GLAS 
+0

@mathguy Это не опечатка, это необходимо для объединения. – sagi

+0

Ух, извините, вы правы. Я не знаю, о чем я думал! (На самом деле, я думал, что вы идете с квалифицированными именами, как у него в оригинале .... но все же) – mathguy

+0

Все в порядке, эти имена вызывают путаницу, колоны, псевдонимы и таблицы, все вызываемые с тем же именем, даже я заблудился в своем собственном коде: P @mathguy – sagi