MySQL问题,求助,查询三个月内每天晚上20:00到次日13:00的最大值。

如题,比如我现有一张表 test表中有两个列分别是datetime,bid。它们的类型分别是timestamp(6)、double。而且表里插入了三个月的数据

图片说明

要从这三个月的数据中,取每天晚上20点到次日下午13点bid的最高值。比 如16号晚上20:00取到17号下午13:00,再取17号晚上20:00依次类推。现在以我自己的小白功力能实现单取一天的,

SELECT datetime,max(bid) FROMtest where datetime between '2019-01-16 20:00:00.000000' and '2019-01-17 13:00:00.000000'

图片说明

可是这样也太累了(实际上数据量更大)求助一下全部读出的解决方法,感谢!

SELECT t2.e_date,t3.datetime,t2.bid FROM
(SELECT e_date,MAX(t1.bid) AS bid FROM
(SELECT datetime,bid,
CASE WHEN CONCAT(date(datetime),' 20:00:00')<=datetime THEN date(datetime)
WHEN datetime<=CONCAT(date(datetime),' 13:00:00') THEN date(DATE_ADD(datetime,INTERVAL -1 DAY))
ELSE '0000-00-00 00:00:00' END AS e_date
FROM date_test
) t1
WHERE e_date!='0000-00-00 00:00:00'
GROUP BY 1
) t2
LEFT JOIN
(SELECT datetime,bid,
CASE WHEN CONCAT(date(datetime),' 20:00:00')<=datetime THEN date(datetime)
WHEN datetime<=CONCAT(date(datetime),' 13:00:00') THEN date(DATE_ADD(datetime,INTERVAL -1 DAY))
ELSE '0000-00-00 00:00:00' END AS e_date
FROM date_test
) t3
ON
t2.bid=t3.bid AND t2.e_date=t3.e_date
;
这是我造的数据
这是结果
里面的2019-06-05 就是指得2019-06-05 08:00:00到2019-06-06 13::00:00这个时间段

SELECT
( select max(t.bid) from test t
WHERE t.dateTime >=DATE_SUB(dateTime,INTERVAL 4 HOUR) and t.dateTime <= DATE_ADD(dateTime,INTERVAL 13 HOUR) ) AS bid
FROM test
WHERE Date( dateTime ) >= DATE_SUB( CURDATE( ), INTERVAL 3 MONTH )