2011-06-09 45 views
1

我有一個像下面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 

現在我需要找到最大(的startDate)與行的表一起查找在組行的最大日期phName。

從本質上講,我想結果集看起來像下面的「名稱」的phName

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

什麼DBMS您使用的? – 2011-06-09 07:10:12

+0

如果這是由例如一個報告工具,當結果被消耗時計算最大值可能更容易。 (請注意,這不僅適用於報告工具) – 2011-06-09 07:27:36

回答

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

在Oracle中,你可以使用這樣的事情:

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

顯而易見的解決方案是使用子查詢,但有些inneficient - 尤其是在MySQL(它不處理子推謂詞查詢很好)。

Daniel Hilgarth的解決方案只適用於Oracle。

對於通用的,有效的解決方案(這不幸導致有些obfuascated代碼),請參閱max concat trick