2015-05-20 95 views
1

我有如下表:如何獲取基於截至日期的最新記錄?

+------------------------------------+ 
|  Number Name  Date   | 
+------------------------------------+ 
| 1 1050 Name1 2015-01-01 | 
| 2 1051 Name2 2015-04-27 | 
| 3 1057 Name3 2015-04-27 | 
+------------------------------------+ 

我應該如何獲得最新的記錄?我已經試過類似:

SELECT number, name, MAX(DATE) AS recent_date 
FROM Recent_Table 
HAVING recent_date < '2015-05-19' 
GROUP BY number, name 

我期待得到最近的記錄,而是我得到所有三個,因爲having子句我的。有沒有辦法解決這個問題,同時仍然保留我的having?謝謝。

預計產出將是:

1051 Name2 2015-04-27 
    1057 Name3 2015-04-27 
+0

才能添加預期的輸出? – ughai

回答

1

試試這個

select number, name, date 
from Recent_Table 
where Date = (SELECT MAX(DATE) AS recent_date 
       FROM Recent_Table 
       WHERE DATE < '2015-05-19') 

存在與name列問題不是having條款。我認爲你不需要having

Sql fiddle演示

0
SELECT number, name, MAX(DATE) AS recent_date 
FROM Recent_Table 
WHERE DATE <= MAX(DATE) 
GROUP BY number, name 

將返回是最新的條目值

+2

'WHERE DATE <= MAX(DATE)'無效 – ughai

0

讓我猜猜

SELECT number, name 
FROM Recent_Table 
WHERE recent_date >= (Select Max(Date) FROM Recent_Table) 
+1

我認爲你的意思是'WHERE Date =(Select Max(Date)FROM Recent_Table)' – ughai

+0

或者這個變體與 –

+0

不一樣。你會得到一個錯誤'Column'recent_date'在HAVING子句中是無效的,因爲它不包含在集合函數或GROUP BY子句中 – ughai

1
SELECT 
number, 
name, 
DATE AS recent_date 
FROM Recent_Table 
WHERE DATE = (SELECT MAX(t2.DATE) 
       FROM Recent_Table t2 
       WHERE t2.number = t1.number) 
相關問題