如何在每个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
答案 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