如何选择特定日期的最高值

sd2nnvve  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(321)

如何选择特定日期的最高值?
我的数据看起来像:

id,value_id,sensor_id,value,time(datetime)     
 1,123,gas,10,2018-01-14 01:00:00
 1,123,gas,20,2018-01-14 02:00:00

我试着看一些东西(也和max一起),比如:

SELECT value
FROM table
WHERE sensor_id = "123"
AND value_id = "gas"
AND time = "2018-01-14"
order by time;
limit 1;

我需要选择某个日期(不是间隔,即2017-01-01->2017-01-03,仅针对指定日期:2018-01-14)记录的特定数据的最高值。
但我得到的是错误或错误的值。

jfgube3f

jfgube3f1#

尝试此查询:

SELECT value 
FROM table
WHERE sensor_id = '123'
AND value_id = 'gas'
AND time >= '2018-01-14'
AND time < '2018-01-15'
ORDER BY value DESC
LIMIT 1;

用单引号代替双引号。
当您想要获得最高值时,您应该对列进行降序(desc)。如果是最高值,不要按时间排序,你可以 select max(value) 在这种情况下,因为它是返回字段,所以不需要order by和limit。
时间的事情我更喜欢做这个替换,因为其他方式它不会与时间戳一起工作,而且这种方式它将始终工作,无论列的类型是date还是timestamp。

bihw5rsg

bihw5rsg2#

这需要一些嵌套查询。
首先,你想知道最新情况 time 每个日期的每个传感器。
你是这样理解的

SELECT DATE(time) date, sensor_id, value_id, 
                            MAX(time) lasttime
                       FROM table
                      GROUP BY DATE(time), sensor_id, value_id

然后你想取回 value 这些行的列。看起来像这样

SELECT a.value, b.date, b.lasttime, b.sensor_id, b.value_id
       FROM table a
       JOIN (
                     SELECT DATE(time) date, sensor_id, value_id, 
                            MAX(time) lasttime
                       FROM table
                      GROUP BY DATE(time), sensor_id, value_id
            ) b ON a.time=b.lasttime 
               AND a.sensor_id = b.sensor_id
               AND a.value_id = b.value_id

有几个小技巧使这成为可能。一是使用max(date)。。。按日期分组(date),以查找每天的最新时间。另一个是连接回原始表以检索 value 列,

相关问题