MYSQL选择最接近给定日期但不是较旧的最旧记录

时间:2012-08-07 00:34:41

标签: php mysql sql database

我有一张表,其中包含属于不同用户的记录。

表:

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

用户10的指定日期为08/02/12。现在我必须选择08/02/12之上的下一个最早的记录。

那将是08/05/12并且永远不会记录下面,除非它到达顶部。这怎么可能在MYSQL中?

4 个答案:

答案 0 :(得分: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'更改为变量或您需要的任何日期。

答案 1 :(得分: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 :(得分:2)

怎么样

从date_created&gt;的条目中选择user_id,date_created。 somedate order by date_created desc limit 1

答案 3 :(得分:0)

以下是为具有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)