2015-05-20 63 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) 
相关问题