[英]MySQL Limit Rows / Group By
我已經搜索了很多關於這個的不同帖子,我找不到適合我的東西。
這在GROUP BY中使用LIMIT來獲得每組N個結果? 和http://www.sqlines.com/mysql/how-to/get_top_n_each_group不適合我。
我有一個簡單的MySQL表,其中包含以下列
id , package, user_id, date
我想執行一個查詢,我會得到
X行/ user_id WHERE日期>編號按日期ASC排序
簡而言之,我們希望使用LIMIT of X rows / group
執行Group By user_id
,但請記住使用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,但是date> = 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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.