theskiguy Ответов: 2

Найдите данные из 3 таблиц с помощью union, но получите только минимальную дату


У меня есть 3 таблицы, которые похожи:

Таблица PROBEVALIDATIONZAXIS
Столбцы:
timeofentry
jobnumber
жить
машина

Таблица PROBEVALIDATIONHOLE
Столбцы:
timeofentry
jobnumber
жить
машина

Таблица PROBEVALIDATIONCORNER
Столбцы:
timeofentry
jobnumber
жить
машина

Я хочу отобразить отдельный номер задания для определенной машины, но я также хочу отобразить дату. Проблема, с которой я сталкиваюсь, заключается в том, что если я включаю timeofentry в инструкцию select, то мой select больше не отображает отдельный номер задания, потому что время ввода отличается в каждой таблице. Как я могу заставить его отображать минимальную дату из всех 3 столбцов вместе с номером задания?

Если я выполню запрос сейчас (см. ниже), то получу следующее:

11/14/2016 05:52: 10 AM 28810
11/14/2016 05:52:16 AM 28810
11/14/2016 05:52: 24 AM 28810
11/14/2016 06: 52: 10 AM 28811
11/14/2016 06: 52: 16 AM 28811
11/14/2016 06: 52: 24 AM 28811


Мне нужен результат с минимальной датой для каждого номера задания:
11/14/2016 05:52: 10 AM 28810
11/14/2016 06: 52: 10 AM 28811


Я должен также добавить, что первоначально у меня были команды union как минус-команды, однако это работает только в том случае, если данные находятся во всех 3 таблицах. Если это только в 1 или 2 таблицах, то я не получаю всех результатов

Что я уже пробовал:

Select timeofentry, JOBNUMBER
FROM PROBEVALIDATIONHOLE
WHERE HOLENUMBER = 1 AND TIMEOFENTRY between to_date('11/13/2016','MM/DD/YYYY HH:MI:SS AM') and to_date('11/14/2016 11:59:59 PM','MM/DD/YYYY HH:MI:SS AM') and machine = 'NC-500'
union
SELECT timeofentry, JOBNUMBER
FROM PROBEVALIDATIONZAXIS
WHERE ZHIT = 1 AND TIMEOFENTRY between to_date('11/13/2016','MM/DD/YYYY HH:MI:SS AM') and to_date('11/14/2016 11:59:59 PM','MM/DD/YYYY HH:MI:SS AM') and machine = 'NC-500'
union
SELECT timeofentry, JOBNUMBER
FROM PROBEVALIDATIONCORNER
WHERE TIMEOFENTRY between to_date('11/13/2016','MM/DD/YYYY HH:MI:SS AM') and to_date('11/14/2016 11:59:59 PM','MM/DD/YYYY HH:MI:SS AM') and machine = 'NC-500'

2 Ответов

Рейтинг:
13

manu_dhobale

Ты пробовал вот так

select t.JOBNUMBER, MIN(t.timeofentry) from (
Select timeofentry, JOBNUMBER
FROM PROBEVALIDATIONHOLE
WHERE HOLENUMBER = 1 AND TIMEOFENTRY between to_date('11/13/2016','MM/DD/YYYY HH:MI:SS AM') and to_date('11/14/2016 11:59:59 PM','MM/DD/YYYY HH:MI:SS AM') and machine = 'NC-500'
union
SELECT timeofentry, JOBNUMBER
FROM PROBEVALIDATIONZAXIS
WHERE ZHIT = 1 AND TIMEOFENTRY between to_date('11/13/2016','MM/DD/YYYY HH:MI:SS AM') and to_date('11/14/2016 11:59:59 PM','MM/DD/YYYY HH:MI:SS AM') and machine = 'NC-500'
union
SELECT timeofentry, JOBNUMBER
FROM PROBEVALIDATIONCORNER
WHERE TIMEOFENTRY between to_date('11/13/2016','MM/DD/YYYY HH:MI:SS AM') and to_date('11/14/2016 11:59:59 PM','MM/DD/YYYY HH:MI:SS AM') and machine = 'NC-500'
)t group by t.JOBNUMBER


theskiguy

Отлично работает! Я пытался сделать что-то похожее, но не использовал группу by. Спасибо за помощь.

manu_dhobale

Спасибо..

Рейтинг:
1

Wendelius

Попробуйте использовать встроенное представление, например следующее

select a.jobnumber, min(a.timeofentry)
from (Select timeofentry, JOBNUMBER
      FROM PROBEVALIDATIONHOLE
      WHERE HOLENUMBER = 1 AND TIMEOFENTRY between to_date('11/13/2016','MM/DD/YYYY HH:MI:SS AM') and to_date('11/14/2016 11:59:59 PM','MM/DD/YYYY HH:MI:SS AM') and machine = 'NC-500'
      union
      SELECT timeofentry, JOBNUMBER
      FROM PROBEVALIDATIONZAXIS
      WHERE ZHIT = 1 AND TIMEOFENTRY between to_date('11/13/2016','MM/DD/YYYY HH:MI:SS AM') and to_date('11/14/2016 11:59:59 PM','MM/DD/YYYY HH:MI:SS AM') and machine = 'NC-500'
      union
      SELECT timeofentry, JOBNUMBER
      FROM PROBEVALIDATIONCORNER
      WHERE TIMEOFENTRY between to_date('11/13/2016','MM/DD/YYYY HH:MI:SS AM') and to_date('11/14/2016 11:59:59 PM','MM/DD/YYYY HH:MI:SS AM') and machine = 'NC-500') a
group by a.jobnumber


theskiguy

Ваше решение работает, но в основном оно такое же, как и первое. Спасибо за помощь.

Wendelius

Да, кажется, то же самое. Как вы можете видеть, разница в две минуты, так что мы, казалось, написали решение одновременно.

Рад, что у тебя получилось.