当日期匹配时,如何在MySQL中每组获得1条记录?

问题描述 投票:0回答:1

据我所知,这不是重复的,其他所有人的日期都不同。例如,我有下表的公司,仪表和服务的最后日期:

Company    MeterCode  Name  LastDate
A          1          MeA   1/1/20
A          2          MeB   1/1/20
A          3          MeC   1/2/20
A          4          MeD   1/2/20

B          1          MeE   2/1/20
B          2          MeF   2/1/20
B          3          MeG   2/2/20
B          4          MeH   2/2/20

我如何查询该表以使每个公司获得1行,返回所有列但具有最新日期?多个仪表的最后维修日期可以与您看到的相同,但是我不关心我最后要使用哪个仪表,只要它是最近的日期即可。在上面的示例中,我想以类似以下内容结束:

Company    MeterCode  Name  LastDate
A          4          MeD   1/2/20
B          4          MeH   2/2/20
mysql greatest-n-per-group
1个回答
0
投票

这是查询的一种变体,在堆栈溢出中经常被问到。

这是可在MySQL 8.0中使用的解决方案,它支持window functions

SELECT t.Company, t.MeterCode, t.Name, t.LastDate
FROM (
    SELECT Company, MeterCode, Name, LastDate,
      ROW_NUMBER() OVER (PARTITION BY Company ORDER BY LastDate DESC) AS rownum
    FROM WhateverYourTableNameIs
) AS t
WHERE t.rownum = 1

您可能会问,“如果我不使用MySQL 8.0,该怎么办?”

MySQL 8.0现在已经在GA版本中发布了两年。我认为现在是时候告诉人们如果他们想要它支持的功能时应该升级。

© www.soinside.com 2019 - 2024. All rights reserved.