Справочная информация:
Я пишу скрипт Python для получения некоторых данных.У меня есть 2 таблицы engine_hours
и machines
в базе данных SQL.Я хочу получить последние полученные данные, полученные за последние 2 дня (что делается с помощью этого date_recorded >=
).
Таблицы:
Первыйтаблица:
engine_hours
=============
machine_id
date_recorded
value
Вторая таблица:
machines
========
id
title
Пример таблицы данных:
Первая таблица:
engine_hours
==================================================
machine_id | date_recorded | value
-------------+--------------------------+---------
1 | 16/10/2018 20:30:02 | 10
3 | 16/10/2018 19:02:32 | 42
2 | 16/10/2018 20:32:56 | 13
2 | 16/10/2018 19:23:23 | 12
1 | 16/10/2018 16:54:59 | 10
1 | 16/10/2018 16:52:59 | 10
1 | 14/10/2018 10:24:59 | 10
Вторая таблица:
machines
==================
id | title
------+-----------
1 | ABC-123
2 | DEF-456
3 | GHI-789
Желаемый результат:
=============================================================
machine_id | title | date_recorded | value
1 | ABC-123 | 16/10/2018 20:30:02 | 10
2 | DEF-456 | 16/10/2018 20:32:56 | 13
3 | GHI-789 | 16/10/2018 19:02:32 | 42
Что я пробовал:
Я пробовал 4 разных запроса, но с треском провалился:
engine_hours_query = "SELECT ma.`title`, eh.`machine_id`, eh.`value`, eh.`date_recorded` " \
"FROM `engine_hours` AS eh inner join `machines` AS ma " \
"WHERE eh.`machine_id` IN ({}) AND eh.`date_recorded` >= \"{}\" " \
" AND eh.`machine_id` = ma.`id`".format(", ".join([str(m_id) for m_id in list_of_machine_ids]),
cut_off_date)
engine_hours_query_2 = "SELECT `machine_id`, `value`, `date_recorded` FROM `engine_hours` AS eh " \
"WHERE `date_recorded` = ( SELECT MAX(`date_recorded`) " \
"FROM `engine_hours` AS eh2 " \
"WHERE eh.`machine_id` = eh2.`machine_id`)"
engine_hours_query_3 = "SELECT `machine_id`, `value`, `date_recorded` FROM `engine_hours` AS eh " \
"WHERE `date_recorded` = ( SELECT MAX(`date_recorded`) " \
"FROM `engine_hours` AS eh2 ) " \
"WHERE eh.`date_recorded` >= \"{}\"".format(cut_off_date)
engine_hours_query_4 = "SELECT ma.`title`, eh.`machine_id`, eh.`value`, eh.`date_recorded` " \
"FROM `engine_hours` AS eh inner join `machines` AS ma " \
"WHERE eh.`machine_id` IN ({}) AND eh.`date_recorded` >= \"{}\" " \
" AND eh.`machine_id` = ma.`id`".format(", ".join([str(m_id) for m_id in list_of_machine_ids]),
cut_off_date)
Исследование: