Php MYSQL选择距离给定日期最近但不较早的最旧记录

Php MYSQL选择距离给定日期最近但不较早的最旧记录,php,mysql,sql,database,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 use

我有一个包含属于不同用户的记录的表

表:

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
的给定日期为
08/02/12
。现在我必须选择上面的下一条最早的记录
08/02/12


这将是
08/05/12
,除非达到顶部,否则永远不会低于该值。在MYSQL中如何实现这一点?

您可以通过组合使用
WHERE
LIMIT

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

其中,
语句将处理日期问题。
LIMIT
语句将把结果减少到一行。显然,您可以将
2012-08-02'
更改为变量或任何您需要的日期。

$date\u给定
具有给定的日期

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


选择用户id、日期创建自以下条目:date\u created>somedate order by date\u created desc limit 1

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

日期存储在什么类型的字段中?是unix时间戳还是其他东西?谢谢,我不明白为什么您要选择两次并加入相同的表。此查询不仅输出创建的日期,而且还输出具有此日期的表中的完整记录。我可能不理解,但在1 join中使用
子句也可以工作。
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)