2011-01-20 67 views
0

这可能是以前讨论过的(或者它太简单了),但我找不到一个简单的答案:应该如何做:选择(单个)最早的未来日期和每个ID的最近日期?SQL:自动从表SELECT中JOIN顶部1? (或更好的方法...)

t1:    ==?==>   (earliest) (most recent) 
|id|date(DESC)|   |id|future_date | past_date | 
+==+==========+   +==+=============+===============+ 
|1 | d1  |   | 1|  d1 |  d3  | 
|2 | d2  |   | 2|  d2 |  d6  | 
      (<==now)  | 3|    |  d4  | 
|1 | d3  | 
|3 | d4  | 
|1 | d5  | 
|2 | d6  | 

我正沿着以下的思路思考,但是我有一种感觉,这是相当复杂/语法错误,而我还没有想出如何限制单的结果(即最新的/最近在未来)。有什么建议么?

SELECT t_1.id,t_1.date AS future_date,t_2.date AS past_date 
    FROM (SELECT * FROM t1 WHERE t1.date>CURRENT_TIMESTAMP) t_1 
    LEFT OUTER JOIN 
    (SELECT TOP 1 * FROM t1 WHERE t1.date<CURRENT_TIMESTAMP) t_2 
    ON t_1.id=t_2.id 
+0

这是哪一个数据库? – 2011-01-20 07:22:43

+0

如果修改它显示CURRENT_TIMESTAMP ...(它有点伪代码...) – ajo 2011-01-20 07:36:06

回答

0

我想你可以使用:

​​

目前还不清楚你正在使用什么数据库 - 顶部TSQL/SQL Server语法只(2000+),而现在,作为NOW()被支持MySQL和PostgreSQL ... CURRENT_TIMESTAMP是ANSI,并且受到所有人的支持。

0

为什么不能工作?

select min(date) past_date,max(DATE)future_date 
from t1 
HAVING MIN(date) < CURRENT_TIMESTAMP AND MAX(DATE) < CURRENT_TIMESTAMP 
group by id