У меня есть 2 таблицы:
TABLE_1:
id | equipment |
1 | voltimeter |
2 | amperemeter |
3 | wattimeter |
4 | eletrical gloves |
ТАБЛИЦА 2
id | id_table1 | inspection_date
1 | 2 | 2017-01-05
1 | 2 | 2017-02-07
1 | 3 | 2017-05-09
1 | 3 | 2018-09-23
1 | 2 | 2018-05-09
1 | 2 | 2017-11-05
Я хочу перечислять ВСЕ значения в TABLE_1 с столбцом с самой последней датой проверки TABLE_2
Результат:
id | equipment | last_inspection_date
1 | voltimeter |
2 | amperemeter | 2018-05-09
3 | wattimeter | 2018-09-23
4 | eletrical gloves |
У меня есть это:
SELECT t1.*, Max(t2.inspection_date) LastInspectionDate
FROM table_1 t1
LEFT JOIN table_2 t2 ON t2.id_table1 = t1.id
Что я здесь делаю неправильно? Я получаю только 1 строку :(
Вы можете присоединиться к группе поддиапазонов ond по id_table1 для максимальной даты
select a.equipment
from table_1 a
left join (
select id_table1, max(inspection_date)
from table_2
group by id_table1 ) t on a.id = t.id_table1
У вас просто отсутствует предложение GROUP BY
:
SELECT t1.id, t1.equipment, MAX(t2.inspection_date) AS LastInspectionDate
FROM table_1 t1
LEFT JOIN table_2 t2 ON t2.id_table1 = t1.id
GROUP BY t1.id
ORDER BY t1.id;
(MAX
- это функция агрегации, которая объединяет все данные в одну строку, если вы не укажете, за какие столбцы вы хотите получить максимум. В вашем случае за строку table_1, т. t1.id
За t1.id
)
Вы можете сделать это в двух запросах: один для table_1 и один подзапрос для соответствующей последней даты проверки из таблицы_2.
select
id,
equipment,
(select max(inspection_date) from table_2 t2 where t2.id_table1 = t1.id) as last_insp
from table_1 t1
order by id;