据我所知,这不是重复的,其他所有人的日期都不同。例如,我有下表的公司,仪表和服务的最后日期:
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
这是greatest-n-per-group查询的一种变体,在堆栈溢出中经常被问到。
这是可在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版本中发布了两年。我认为现在是时候告诉人们如果他们想要它支持的功能时应该升级。