Присоединяйтесь к значениям даты и времени - PullRequest
0 голосов
/ 06 апреля 2020

Я рассчитываю подсчитать количество записей на основе совпадения значений даты и времени:

create table `weather` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `dt_iso` datetime DEFAULT NULL,
  `weather_main` varchar(60) DEFAULT NULL);

insert into `weather` (`dt_iso`,`weather_main`) values ("2019-01-01 23:00:00","cloud"), ("2019-01-02 00:00:00","sun"), ("2019-01-02 01:00:00","cloud");

create table `incidents` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `Incident_Date` datetime DEFAULT NULL);

insert into `incidents` (`Incident_Date`) values ("2019-01-01 23:50:00"), ("2019-01-01 23:50:00"), ("2019-01-09 10:05:00");

В SQL Fiddle: http://sqlfiddle.com/#! 9 / 489f57

Это тип вывода, который я ищу:

dt_iso, weather_main, count(incidents), 
2019-01-01T23:00:00, cloud, 0
2019-01-02T00:00:00, sun, 2
2019-01-02T01:00:00, cloud, 0

1 Ответ

1 голос
/ 06 апреля 2020

Похоже, вы пытаетесь посчитать инциденты за час до времени в таблице weather, что вы можете сделать с помощью этого запроса:

SELECT w.dt_iso, w.weather_main, COALESCE(COUNT(i.id), 0) AS incidents
FROM weather w
LEFT JOIN incidents i ON i.Incident_Date >  w.dt_iso - INTERVAL 1 HOUR 
                     AND i.Incident_Date <= w.dt_iso
GROUP BY w.id

Вывод:

dt_iso                  weather_main    incidents
2019-01-01T23:00:00Z    cloud           0
2019-01-02T00:00:00Z    sun             2
2019-01-02T01:00:00Z    cloud           0

Демонстрация по SQLFiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...