我有一个表,其中包含属于不同用户的记录。
表:
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中是怎么可能的?
让$date_given
具有给定的日期。
SELECT user_id, MIN(date_created) as date_created
FROM (entries)
WHERE date_created > $date_given
GROUP BY user_id
LIMIT 1
您可以使用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
WHERE
语句将处理日期问题。LIMIT
语句将把您的结果保留为一行。显然,您可以将2012-08-02'
更改为变量或您需要的任何日期。
怎么样
从date_created>somedate order by date_created desc limit 1 的条目中选择user_id,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)