Изменение с самого последнего времени отправки изменений в тот же день MYSQL - PullRequest
0 голосов
/ 26 сентября 2018
CREATE TABLE `foo` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
`ID` varchar(45) DEFAULT NULL,
`Delivery_Date` date NOT NULL,
`Hour_Ending` time NOT NULL,
`Resource_Name` varchar(45) DEFAULT NULL, 
`Eff_HASL` float DEFAULT NULL,
`Submit_Time` datetime DEFAULT NULL,
PRIMARY KEY (`pk`)
);

INSERT INTO `foo` (`pk`,`id`,`Delivery_Date`,`Hour_Ending`,`Resource_Name`,`eff_hasl`,`Submit_Time`) VALUES 
(1,'2435672','2012-01-25','09:00:00','BASTEN_1',0,'2012-01-18 08:33:52'),
(2,'2435672','2012-01-25','09:00:00','BASTEN_1',0,'2012-01-19 07:47:33'),
(11,'2435672','2012-01-25','09:00:00','BASTEN_1',269,'2012-01-25 05:50:05'),

(3,'2435672','2012-01-26','09:00:00','BASTEN_2',111,'2012-01-18 08:33:52'),
(4,'2435672','2012-01-26','09:00:00','BASTEN_2',0,'2012-01-24 07:47:33'),
(5,'2435672','2012-01-26','09:00:00','BASTEN_2',269,'2012-01-25 05:45:05'),
(6,'2435672','2012-01-26','09:00:00','BASTEN_2',269,'2012-01-26 05:50:05'),

(7,'2435672','2012-01-27','09:00:00','BASTEN_3',111,'2012-01-18 08:33:52'),
(8,'2435672','2012-01-27','09:00:00','BASTEN_3',0,'2012-01-24 07:47:33'),
(9,'2435672','2012-01-27','09:00:00','BASTEN_3',269,'2012-01-27 05:45:05'),
(10,'2435672','2012-01-27','09:00:00','BASTEN_3',500,'2012-01-27 05:50:05');

SELECT * FROM foo;
+----+---------+---------------+-------------+---------------+----------+---------------------+
| pk | ID      | Delivery_Date | Hour_Ending | Resource_Name | Eff_HASL | Submit_Time         |
+----+---------+---------------+-------------+---------------+----------+---------------------+
|  1 | 2435672 | 2012-01-25    | 09:00:00    | BASTEN_1      |        0 | 2012-01-18 08:33:52 |
|  2 | 2435672 | 2012-01-25    | 09:00:00    | BASTEN_1      |        0 | 2012-01-19 07:47:33 |
|  3 | 2435672 | 2012-01-26    | 09:00:00    | BASTEN_2      |      111 | 2012-01-18 08:33:52 |
|  4 | 2435672 | 2012-01-26    | 09:00:00    | BASTEN_2      |        0 | 2012-01-24 07:47:33 |
|  5 | 2435672 | 2012-01-26    | 09:00:00    | BASTEN_2      |      269 | 2012-01-25 05:45:05 |
|  6 | 2435672 | 2012-01-26    | 09:00:00    | BASTEN_2      |      269 | 2012-01-26 05:50:05 |
|  7 | 2435672 | 2012-01-27    | 09:00:00    | BASTEN_3      |      111 | 2012-01-18 08:33:52 |
|  8 | 2435672 | 2012-01-27    | 09:00:00    | BASTEN_3      |        0 | 2012-01-24 07:47:33 |
|  9 | 2435672 | 2012-01-27    | 09:00:00    | BASTEN_3      |      269 | 2012-01-27 05:45:05 |
| 10 | 2435672 | 2012-01-27    | 09:00:00    | BASTEN_3      |      500 | 2012-01-27 05:50:05 |
| 11 | 2435672 | 2012-01-25    | 09:00:00    | BASTEN_1      |      269 | 2012-01-25 05:50:05 |
+----+---------+---------------+-------------+---------------+----------+---------------------+

У меня есть таблица с серией обновлений для определенного часа, который отмечен Delivery_Date и hour_ending (мы назовем рабочий час).Submit_Time - когда произошло обновление.Обновления могут начинаться за 14 дней до рабочего часа.

Обновление может происходить один раз 14 дней назад и никогда не может быть изменено, или их можно менять каждый час вплоть до рабочего часа.Большую часть времени eff_hasl изменяется пару раз, но редко эти изменения производятся в тот же день, что и рабочий час.

Мой запрос пытается отловить изменения, которые происходят в тот же день, что и рабочий часс помощью предложения Delivery_Date = date (Submit_Time).Я не могу понять, как установить начальное состояние для сравнения.Этот запрос просматривает только отправку в тот же день, но не может сравниться с самой последней отправкой, если есть отправка в тот же день.Меня волнует только то, как изменится eff_hasl.

Я ищу дельту для каждого ресурса для каждой даты доставки для каждого часа_ окончания на весь год.Если у ресурса нет одного и того же дня, отправьте дельту следует = 0, если они это сделают, следует сравнить список записей в тот же день отправки и последнюю предыдущую отправку перед этим днем.Так что должно получиться что-то вроде:

BASTEN_1 delta за 2012-01-25 09:00:00 = 269 что-то вроде:

'2012-01-25', '09:00: 00 ',' BASTEN_1 ', 269

BASTEN_2 delta для 2012-01-26 09:00:00 = 0 что-то вроде

' 2012-01-26 ',' 09:00: 00 ',' BASTEN_2 ', 0

BASTEN_3 = 500 ...

select Delivery_Date, Hour_Ending, Resource_Name, min(eff_hasl)-max(eff_hasl) delta
from foo 
where Delivery_Date = date(Submit_Time)
group by Resource_Name, date(Delivery_Date), hour(hour_ending) having delta <> 0;

Я думаю, что должен быть какой-то подзапрос?Я хочу включить в список самую последнюю отправку до даты (час работы) для сравнения.что-то вроде:

select a.Delivery_Date, a.Hour_Ending, a.Resource_Name, min(b.eff_hasl)-max(a.eff_hasl) delta
from foo as a
inner join (SELECT Resource_Name, Delivery_Date, Hour_Ending, submit_time, 
    eff_hasl  
    FROM foo
    where date(submit_time) < Delivery_date
    GROUP BY resource_name, delivery_date, Hour_Ending
    order by Submit_Time desc
    limit 1
) as b
ON      (b.resource_name = a.resource_name AND b.delivery_date = 
         a.delivery_date AND b.hour_ending = a.hour_ending)
where a.Delivery_Date = date(a.Submit_Time)
group by a.Resource_Name, date(a.Delivery_Date), hour(a.hour_ending) having delta <> 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...