簡體   English   中英

MySQL限制行/分組依據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM