2016-10-06 61 views
-1

我有一个表如何从sql表中获取最大值与group by?

Id | Version | DateFrom | DateTo  | 
_______________________________________ 
1 | 1  | 2015-09-15 | 2015-09-18 | 
1 | 2  | 2015-09-15 | 2015-09-18 | 
1 | 3  | 2015-09-15 | 2015-09-20 | --different date 
1 | 4  | 2015-09-15 | 2015-09-18 | 
2 | 1  | 2015-09-15 | 2015-09-18 | 
2 | 2  | 2015-09-15 | 2015-09-18 | 

而我试图让与最新版本的独立于其他列则返回记录的视图。 因此,例如我想到:

Id | Version | DateFrom | DateTo  | 
_______________________________________ 
1 | 4  | 2015-09-15 | 2015-09-18 | 
2 | 2  | 2015-09-15 | 2015-09-18 | 

这是我已经做了:

Select 
    Id, 
    MAX([Version]) AS Version, 
    DateFrom, 
    DateTo 
FROM 
    dbo.Table_1 
Group By 
    Id, 
    DateFrom, 
    DateTo 

但结果是:

Id | Version | DateFrom | DateTo  | 
_______________________________________ 
1 | 4  | 2015-09-15 | 2015-09-18 | 
1 | 3  | 2015-09-15 | 2015-09-20 | 
2 | 2  | 2015-09-15 | 2015-09-18 | 
+0

为什么不'GROUP BY Id' ? –

+0

@RuslanOsmanov,GROUP BY无效。不会在较新的MySQL版本上执行。 – jarlh

+0

@jarlh,即使它会(有一个选项允许它),通过'ID'分组将不起作用。 – sagi

回答

1

也可以用左做加盟:

SELECT t.* 
FROM YourTable t 
LEFT JOIN YourTable s 
ON(t.id = s.id AND t.version < s.version) 
WHERE s.version is null 
0

有一个子查询,返回每个ID的最大版。与结果加入:

select t1.* 
from tablename t1 
join (select id, max(version) as maxversion 
     from tablename 
     group by id) t2 
    on t1.id = t2.id and t1.version = t2.maxversion 
0

您可以运行查询类型:

Select ID, version, dateFrom, dateTo 
from table_1 a 
where not exists (
select 1 
from table_1 b 
where a.id = b.id and a.version < b.version)