2011-09-15 45 views
0

这是针对MySQL的,但可能有更普遍适用的SQL语句。不过,我并不需要这种便携。MySQL查询以获得与第二列的最大值配对的列

我有一个表像这样:

| id | site | used | date | 
| 1 | A | 180 | 9/15 | 
| 2 | A | 110 | 9/14 | 
| 3 | A | 90 | 9/13 | 
| 4 | B | 200 | 9/15 | 
| 5 | B | 220 | 9/14 | 
| 6 | B | 270 | 9/13 | 
| 7 | C | 910 | 9/14 | 
| 8 | C | 930 | 9/13 | 

说明:数据每天都在拍摄,但站点C的最后一天捕获了9/14。

如何获得一个结果集,该结果集为每个网站捕获单个行,并且该网站的日期可能包含maxmim值?

结果将是:

| id | site | used | date | 
| 1 | A | 180 | 9/15 | 
| 4 | B | 200 | 9/15 | 
| 7 | C | 910 | 9/14 | 

回答

2
select t.* 
from (
    select site, max(date) as MaxDate 
    from MyTable 
    group by site 
) tm 
inner join MyTable t on tm.site = t.site and tm.MaxDate = t.Date 

你会得到重复的行如果有多个站点记录具有相同的日期,但是。

+0

此表在(date,site)上有一个唯一索引,所以dupe行不是问题。谢谢 – JDS

0
SELECT * FROM (
    SELECT * FROM `test` ORDER BY date DESC 
) AS t 
GROUP BY `site` 
相关问题