我有一张这样的table:
timesent |nr | value
2018-10-31 05:23:06 | 4 | Value 3
2018-10-31 05:20:19 | 4 | Value 2
2018-10-31 05:19:35 | 4 | Value 1
2018-10-31 04:55:56 | 3 | Value 2
2018-10-31 03:05:15 | 3 | Value 1
2018-10-31 01:31:49 | 2 | Value 1
2018-10-30 04:11:16 | 1 | Value 1
目前,我的选择如下:
SELECT * FROM values WHERE ORDER BY timesent DESC
我想做一个sqlselect语句,它只返回每个“nr”的最新值。
我的技能不足以将其转换为sql语句。我不知道´我甚至不知道我应该用谷歌搜索什么。
1条答案
按热度按时间czq61nw11#
Values
是mysql中的保留关键字。考虑将表名更改为其他名称;否则,您将不得不在其周围使用反勾号有多种方法可以解决你的问题。一种方法是在
nr
(要获取最大值的字段)timesent
仅限值行)。对于mysql版本>=8.0.2,可以使用窗口函数。我们将决定
Row_Number()
对于分区上的每一行nr
,与timesent
按降序排列(最高timesent
值的行号为1)。然后,在派生表中使用这个结果集,只考虑那些行,其中行号等于1。然而,另一种方法是获得
timesent
为了一个nr
在派生表中分组。现在将此结果集连接到主表,以便只显示与max value对应的行: