mysql根据不同的最新时间戳选择行
我有一个由序列号标识的传感器的SQL数据表,该传感器有4个输出值,即1,2,3,4 我需要获取每个传感器的最新记录以及每个输出值的最新值(1,2,3,4) 桌子 我要去拿行李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
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