2011-01-20 65 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