Как выбрать из нескольких строк дочерней / объединяющей таблицы в одну строку в наборе результатов на основе последовательности? - PullRequest
0 голосов
/ 05 сентября 2018
tbl_vacations
vac_id  | vac_name
1       | American vacation
2       | European vacation


tbl_vacation_stops
stop_id | vac_id | stop_sequence | stop_name    | stop_strt_day | stop_end_day
1       |  1     |  1            | New York     | may 1 2018    | may 3 2018
2       |  1     |  2            | Boston       | may 4 2018    | may 6 2018            
3       |  1     |  3            | Chicago      | may 7 2018    | may 9 2018    
4       |  2     |  1            | Paris        | jun 10 2018   | jun 15 2018   
5       |  2     |  2            | Berlin       | jun 16 2018   | jun 19 2018   

select 
v.vac_id as vac_id, 
v.vac_name as vac_name,
vs.stop_strt_day as vac_strt_day
from tbl_vacations v 
join tbl_vacation_stops vs 
where v.vac_id=vs.vac_id and vs.stop_sequence='1'

vac_id  |   vac_name             | vac_strt_day | vac_end_day
1       |   American vacation    | may 1 2018   | may 9 2018
2       |   European vacation    | jun 10 2018  | jun 19 2018

Если в каждом отпуске разное количество остановок, как мне рассчитать vac_end_day на основе максимальной последовательности остановок?

1 Ответ

0 голосов
/ 05 сентября 2018

это бы сработало:

select 
v.vac_id as vac_id, 
v.vac_name as vac_name,
(select stop_strt_day from tbl_vacation_stops where vac_id = v.vac_id 
 and stop_sequence = (select min(stop_sequence) from tbl_vacation_stops where vac_id = 
                      v.vac_id)
) as vac_strt_day,
(select stop_end_day from tbl_vacation_stops where vac_id = v.vac_id 
 and stop_sequence = (select max(stop_sequence) from tbl_vacation_stops where vac_id = 
                      v.vac_id)
) as vac_end_day  
from tbl_vacations v 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...