MySQL:选择特定日期之前的最近日期

时间:2016-05-21 14:29:16

标签: mysql sql

如何在每个return apply_filters( 'filter-tag' , $html );的特定日期之前仅选择最近的日期(选择整行)? (为每个用户选择单行)

表样本:

user_id

SQL示例:(似乎没有按预期工作)

id     user_id     create_date
0         1         2016-01-01
1         1         2016-01-05
2         2         2016-01-06
3         3         2016-01-06
4         2         2016-01-09
5         2         2016-01-12
6         4         2016-01-15
7         1         2016-01-21
8         2         2016-01-22
9         5         2016-01-25

预期结果:

select t.id,t.user_id,MAX(t.create_date)
from sample_table t
where date(t.create_date) < '2016-01-20'
group by t.user_id
limit 10

3 个答案:

答案 0 :(得分:2)

在您的示例数据中,id随着create_date的增加而增加。这似乎是合理的,如果是真的,你可以使用:

select max(t.id) as id, t.user_id, MAX(t.create_date)
from sample_table t
where date(t.create_date) < '2016-01-20'
group by t.user_id;

我认为date()子句中不需要where函数;这会阻止使用索引(如果适用)。

答案 1 :(得分:1)

您可以使用

select 
    t.id, t.user_id, t.create_date
from 
    sample_table t
inner join
    (
        select 
            user_id, MAX(create_date) max_create_date
        from 
            sample_table 
        where 
            date(create_date) < '2016-01-20';
        group by 
            user_id
    ) t1
on
    t.user_id = t1.user_id and t.create_date = t1.max_create_date;

答案 2 :(得分:0)

您可以使用嵌套选择:

select * from 
     (select * from sample_table where 
          date(create_date) < '2016-01-20' 
          order by user_date desc 
     )t 
group by user_id

这是一个fiddle