2

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

桌子:

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

例如,查询返回 user 的所有记录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 中怎么可能?

4

4 回答 4

2

您可以使用 和 的组合来做到这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'为变量或您需要的任何日期。

于 2012-08-07T00:37:29.713 回答
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
于 2012-08-07T00:38:00.257 回答
2

怎么样

从 date_created > somedate order by date_created desc limit 1 的条目中选择 user_id, date_created

于 2012-08-07T00:54:20.843 回答
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)
于 2012-08-07T10:07:41.387 回答