2016-09-18 65 views
3

我在MySQL中有一個表,其中有一個字段「class_id」。我需要編寫一個查詢,返回使用降序時間順序排序的前15行,對於IN列表中的每個值都使用IN子句。使用IN子句進行Mysql查詢並限制每個項目

查詢用於解釋:

select * from table_x where class_id IN (1,2,3) sort by time_x desc limit 15; 

在上述例子中的查詢,我需要爲每個讀取類標識碼前15行(1,2和3)有序基於降序時間順序。

+0

請張貼表結構。 – 1000111

回答

2

你需要的MySQL user defined variables

SELECT 
* 
FROM 
(
    SELECT 
     X.*, 
     IF(@sameClass = class_id, @rn := @rn + 1, 
      IF(@sameClass := class_id, @rn := 1, @rn := 1) 
     ) AS rank 
    FROM table_x AS X 
    CROSS JOIN (SELECT @sameClass := 0, @rn := 1) AS var 
    WHERE class_id IN (1, 2, 3) 
    ORDER BY class_id, time_x DESC 
) AS t 
WHERE t.rank <= 15 
ORDER BY t.class_id, t.rank 

幫助你的情況LIMIT 15實際上將結果集限制最多可容納15條記錄這是不是你想要的。

+0

正是我正在尋找的那個。 Teste,它工作正常。謝謝。而且,是的,我只是爲了更好的解釋而在我的問題中發佈了上述查詢。 – Sudheer

+0

不客氣。另外請注意,你可以通過這行'WHERE t.rank <= n'輕鬆調整每個類的記錄數。你可以把任何值給n – 1000111