Мой sql фильтр по последней дате

0

У меня есть 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 строку :(

Теги:

3 ответа

0
Лучший ответ

Вы можете присоединиться к группе поддиапазонов 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
  • 0
    Это решило мою проблему. огромное спасибо
0

У вас просто отсутствует предложение 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)

0

Вы можете сделать это в двух запросах: один для 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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню