gpt4 book ai didi

MySQL 限制行数/分组依据

转载 作者:行者123 更新时间:2023-11-29 05:15:24 24 4
gpt4 key购买 nike

我搜索了很多关于此的不同帖子,但没有找到适合我的内容。

Using LIMIT within GROUP BY to get N results per group?http://www.sqlines.com/mysql/how-to/get_top_n_each_group对我不起作用。

我有一个简单的 MySQL 表,其中包含以下列

id , package, user_id, date

我想执行一个我将得到的查询

X Rows / user_id WHERE date > Number Order By date ASC

简而言之,我们要执行 Group By user_idLIMIT of X rows / group但请记住使用 date column 的声明

全表示例:

id , package, user_id, date
1, full, 1 , 1447003159
2, full, 1 , 1447003055
3, full, 1 , 1447002022
4, full, 1 , 1447001013
5, full, 1 , 1447000031
6, mid, 2 , 1447003159
7, mid, 2 , 1447003055
8, mid, 2 , 1447002022
9, mid, 2 , 1447001013
10, mid, 2 , 1447000031

从上表中,我们只想选择 2 行/user_id,但其中日期 >= 1447000031(但先制作 ORDER BY date ASC)

预期输出:

4,  full, 1 , 1447001013
3, full, 1 , 1447002022
9, mid, 2 , 1447001013
8, mid, 2 , 1447002022

最佳答案

例如:

SELECT x.*
FROM my_table x
JOIN my_table y
ON y.id >= x.id
AND y.user_id = x.user_id
WHERE y.date > 1447000031
GROUP
BY x.id
HAVING COUNT(*) <= 2;

或者,更快,但打字更多...

SELECT id
, package
, user_id
, date
FROM
( SELECT x.*
, CASE WHEN @prev_user = user_id THEN @i:=@i+1 ELSE @i:=1 END rank
, @prev_user := user_id
FROM my_table x
, ( SELECT @prev_user = 0,@i:=1 ) vars
WHERE date > 1447000031
ORDER
BY user_id
, date
) a
WHERE rank <= 2;

关于MySQL 限制行数/分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33596650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com