SQL - 查找行集中的最大日期以及所有其他数据

时间:2011-06-09 07:06:26

标签: sql

我有一个包含下面行的表

id, name , phName , startDate, endDate

1   A    , Name      1-1-2011  5-1-2011

2   B    , Name      5-1-2011  10-10-2011

3   C    , Name      2-1-2011  11-10-2011

4   X    , XXName    2-1-2011  11-10-2011

现在我需要找到max(startDate)以及给定phName的所有其他列。

基本上,我希望结果集看起来像下面的phName为“Name”

max(startDate)
5-1-2011,         1   A    , Name      1-1-2011  5-1-2011

5-1-2011,         2   B    , Name      5-1-2011  10-10-2011

5-1-2011,         3   C    , Name      2-1-2011  11-10-2011

我不想使用临时表来获取结果集。

3 个答案:

答案 0 :(得分:2)

SELECT 
   (SELECT Max(StartDate) FROM myTable WHERE phName = "Name") as MaxDate, 
   id, name , phName , startDate, endDate
FROM myTable
WHERE phName = "Name"

答案 1 :(得分:0)

在Oracle中,您可以使用以下内容:

select
    MAX(startDate) OVER(PARTITION BY phName),
    ID, name, phName, startDate, endDate
from table
where phName = 'Name';

答案 2 :(得分:0)

显而易见的解决方案是使用子查询,但有点不合适 - 特别是在MySQL(它不能很好地处理子查询中的推送谓词)。

Daniel Hilgarth的解决方案仅适用于Oracle。

对于一个通用的,有效的解决方案(不幸的是会产生一些有点不合理的代码),请参阅max concat trick