2012-08-07 124 views
2

我有一張表,其中包含屬於不同用戶的記錄。MYSQL選擇距離給定日期最近但最早的最舊記錄

表:

RECORD_ID  USER_ID  DATE_CREATED 
1    5   08/05/12 
2    5   08/04/12 
3    10   08/05/12 
4    10   08/02/12 
5    10   08/01/12 

查詢:

SELECT user_id, MIN(date_created) as date_created 
FROM (entries) 
GROUP BY user_id 

該查詢返回每個用戶最舊的記錄。

RECORD_ID  USER_ID  DATE_CREATED 
2    5   08/04/12 
5    10   08/01/12 

如何選擇距離給定日期最近但最近的最舊記錄?沿着線的東西...

SELECT oldest record > given oldest record 
WHERE oldest record NOT =< given oldest record 

例如查詢返回的所有記錄用戶10

RECORD_ID  USER_ID  DATE_CREATED 
3    10   08/05/12 
4    10   08/02/12 
5    10   08/01/12 

給定的日期爲用戶1008/02/12。現在我必須選擇08/02/12以上的下一個最早的記錄。

這將是08/05/12並從未記錄下面,除非它達到頂部。這在MYSQL中可能如何?

+0

日期存儲的日期是什麼字段?是unix時間戳還是別的? – 2012-08-07 00:37:39

+0

日期時間格式 – CyberJunkie 2012-08-07 00:38:09

回答

2

$date_given有給定日期。

SELECT user_id, MIN(date_created) as date_created 
FROM (entries) 
WHERE date_created > $date_given 
GROUP BY user_id 
LIMIT 1 
2

您可以用WHERELIMIT組合做到這一點:

SELECT user_id, content, MIN(date_created) as date_created 
FROM (entries) 
WHERE date_created > '2012-08-02' 
GROUP BY user_id 
LIMIT 1 

WHERE語句將處理的日期問題。 LIMIT聲明會將結果保持爲一行。顯然,您可以將2012-08-02'更改爲變量或任何您需要的日期。

0

這裏從條目時DATE_CREATED> somedate爲了DATE_CREATED如何查詢以選擇與RECORD_ID的所有用戶最近的記錄。只需更改'08/02/12'到您需要的日期:

select 
    entries.record_id,entries.user_id, entries.Date_created 
from entries 
join 
(select 
     user_id,min(Date_created) minDate 
      from entries 
      where Date_Created>'08/02/12' 
     group by user_id 
) minDates on (entries.user_id=minDates.user_id) 
       and 
       (entries.Date_created=minDates.minDate) 
+0

謝謝我不明白你爲什麼選擇兩次並加入相同的表格。 – CyberJunkie 2012-08-07 15:16:56

+0

它應該只通過用戶id分組 – CyberJunkie 2012-08-07 15:28:40

+0

這個查詢不僅輸出Date_created,但也從這個Date_created – valex 2012-08-08 07:16:03