这个问题在这里已经有答案了:
检索每个组中的最后一条记录-mysql(29个答案)
两年前关门了。
我有下表。
+--------------------+--------------+-------+
Date | SymbolNumber | Value
+--------------------+--------------+-------+
2018-08-31 15:00:00 | 123 | data
2018-09-31 15:00:00 | 456 | data
2018-09-31 15:00:00 | 123 | data
2018-09-31 15:00:00 | 555 | data
2018-10-31 15:00:00 | 555 | data
2018-10-31 15:00:00 | 231 | data
2018-10-31 15:00:00 | 123 | data
2018-11-31 15:00:00 | 123 | data
2018-11-31 15:00:00 | 555 | data
2018-12-31 15:00:00 | 123 | data
2018-12-31 15:00:00 | 555 | data
我需要一个查询,可以选择查询中所述的每个符号编号的最后一行。
SELECT
*
FROM
MyTable
WHERE
symbolNumber IN (123, 555)
AND
**lastOfRow ordered by latest-date**
预期结果:
2018-12-31 15:00:00 | 123 | data
2018-12-31 15:00:00 | 555 | data
我该怎么做?
2条答案
按热度按时间x759pob21#
首先,您将需要一个查询,该查询将获取每个事件的最新日期
symbolNumber
. 第二,你可以inner join
此表(使用date
)去拿剩下的柱子。这样地:前面的查询将获取每个现有数据库的最新数据
symbolNumber
在table上。如果你想限制symbolNumbers: 123 and 555
,您将需要进行下一次修改:nbysray52#
我们可以在上做“自左连接”
symbolNumber
,并匹配同一组中具有较高Date
右边的值。我们最终只考虑那些无法找到更高日期的行(这意味着当前行属于组中的最高日期)。
下面是一个避免子查询和利用
Left Join
:编辑:
比较基准研究
Left Join
方法v/s派生表(子查询)@草莓在5.6.21中运行了一个小基准测试。这是他发现的。。。
总之,排除连接(exclusion-join,即所谓的“草莓查询”)在某些有限的情况下可以(显著地)更快。一般来说,不相关的查询会更快。