我有一个包含下面行的表
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
我不想使用临时表来获取结果集。
答案 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