mysql根据不同的最新时间戳选择行

mysql根据不同的最新时间戳选择行,mysql,Mysql,我有一个由序列号标识的传感器的SQL数据表,该传感器有4个输出值,即1,2,3,4 我需要获取每个传感器的最新记录以及每个输出值的最新值(1,2,3,4) 桌子 我要去拿行李 id serial output_value timestamp -- ------ ------------ --------- 1 111 2 2020-12-1 01:00:06 3

我有一个由序列号标识的传感器的SQL数据表,该传感器有4个输出值,即1,2,3,4

我需要获取每个传感器的最新记录以及每个输出值的最新值(1,2,3,4)

桌子

我要去拿行李

 id    serial    output_value           timestamp
  --    ------    ------------           ---------
   1     111           2            2020-12-1 01:00:06 
   3     111           1            2020-12-1 01:00:04 
   4     111           3            2020-12-1 01:00:03 
   5     222           1            2020-12-1 01:00:02 
   6     222           3            2020-12-1 01:00:01 
命令

SELECT DISTINCT ON (serial)
id,serial,output_value, timestamp  
FROM sensorTable
ORDER BY serial, timestamp DESC;
但是我不知道如何用它添加
输出值

Mysql版本

mysql 5.7.23, for Linux (x86_64) using  EditLine wrapper
--编辑--

正如草莓和斯克莱特所指出的,我之前的回答是解决问题的错误方法。这是一个不依赖黑客的更好的解决方案

SELECT 
    s.*
FROM
    sensors AS s
INNER JOIN
    (
    SELECT 
        serial, 
        output_value, 
        MAX(timestamp) AS timestamp
    FROM 
        sensors
    GROUP BY 
        serial, output_value
    ) AS sq
ON 
    s.serial = sq.serial
AND
    s.output_value = sq.output_value
AND
    s.timestamp = sq.timestamp

您的MySQL版本是什么?MySQL版本14.14发行版5.7.23,用于Linux(x86_64),在is postgresql MySQL上使用EditLine wrapperSELECT DISTINCT没有等效版本。如果您确实在使用MySQL(我仍然不确定),那么,要获得进一步的帮助,请参阅-但请注意,这是最常见的问题,并且,与下面不同,有时答案也是正确的。因为每次有多行具有相同的
serial
output\u value
值时,您似乎只需要一条记录,所以您可以对它们进行
分组。一旦他们分组,请询问最长时间戳:@草莓,我不知道你的意思。请发布正确的方法,或者提供正确方法的参考。你侮辱我,然后离开,对任何人都没有帮助。我的答案可能不是最好的,但至少是一个答案。“你可能已经学会了一个正确的方法来做这件事,而不是这个令人沮丧的黑客!”。即使这只是一种批评,你也应该发布正确的解决方案。我认为只要求max(时间戳)会更好一些。我认为你是对的@Scratte,尽管它仍然不能让你获得id列,我认为你需要使用子查询来实现这一点。
SELECT 
    s.*
FROM
    sensors AS s
INNER JOIN
    (
    SELECT 
        serial, 
        output_value, 
        MAX(timestamp) AS timestamp
    FROM 
        sensors
    GROUP BY 
        serial, output_value
    ) AS sq
ON 
    s.serial = sq.serial
AND
    s.output_value = sq.output_value
AND
    s.timestamp = sq.timestamp