我有一个这样的表:
id int primary key
user_id int,
activity_date date,
activity_type int,
activity_value float
uniq 键(user_id、activity_date、activity_type)
我想获取给定日期 (activity_date
)(例如今天或昨天)每个 activity_type
中按 activity_value
排序的前 10 行.
我尝试了自连接变体,但没有得到正确的结果。这是我尝试过的。
select
a.user_id, a.activity_date, a.activity_type, a.activity_value
from
my_table a
left join
my_table b on a.activity_type = b.activity_type and a.id < b.id
where
a.activity_date = curdate()
group by
a.id
having
count(*) < 10
order by
a.activity_value desc;
SQL fiddle :http://sqlfiddle.com/#!9/d30332/3
有人可以帮我纠正这个查询吗?
最佳答案
好吧,我想你已经差不多了,我想你只是错过了 b.activity_date = curdate()
条件。另外我认为LEFT JOIN
是不必要的。
select a.*
from my_table a
join my_table b on a.activity_type = b.activity_type and
a.activity_value <= b.activity_value
where a.activity_date = curdate() and b.activity_date = curdate()
group by a.id
having count(*) <= 10
关于mysql - 选择给定日期每组的前 10 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46940149/