2016-03-06 69 views
1

嗯,我有一個表(MYSQL)'product',其中一列名爲'category_id',用於存儲另一個表'category'中的類別id。所以'category_id'列中有多個類別。例如下表。現在我想從每個類別中選擇固定數量的產品(比如說2),例如我想從產品表格的每個類別中選擇2個最新產品。我應該用什麼mysql查詢,任何想法?按條件選擇行Mysql

產品:

+-------------+------+---------------------+ 
| category_id | name |  timestamp  | 
+-------------+------+---------------------+ 
|   1 | abc | 2016-02-27 16:04:00 | 
|   1 | def | 2016-02-28 16:10:00 | 
|   1 | ghi | 2016-02-29 16:11:00 | 
|   2 | pqr | 2016-02-27 16:04:00 | 
|   2 | stu | 2016-02-27 16:05:00 | 
|   3 | vwx | 2016-02-28 16:04:00 | 
+-------------+------+---------------------+ 

預期結果:

產品:

+-------------+------+---------------------+ 
| category_id | name |  timestamp  | 
+-------------+------+---------------------+ 
|   1 | def | 2016-02-28 16:10:00 | 
|   1 | ghi | 2016-02-29 16:11:00 | 
|   2 | pqr | 2016-02-27 16:04:00 | 
|   2 | stu | 2016-02-27 16:05:00 | 
|   3 | vwx | 2016-02-28 16:04:00 | 
+-------------+------+---------------------+ 
+0

哦,任何的人會工作。由於我的工作表中有很多列,所以我決定使用上面簡化的表格,這些表格不是我正在使用的精確表格,任何建議都可以對我有所幫助,謝謝。 – amanda014

回答

1

它可以幫助你...

檢查SQL Fiddl輸出E鏈路:http://sqlfiddle.com/#!9/3942d2/6

SELECT 
    category_id, 
    name, 
    tsDate 
FROM 
(
    SELECT 
     category_id, 
     name, 
     tsDate, 
     @rn := IF(@prev = category_id, @rn + 1, 1) AS rn, 
     @prev := category_id 
    FROM Product 
    JOIN (SELECT @prev := NULL, @rn := 0) AS vars 
    ORDER BY category_id, tsDate DESC, name 
) AS T1 
WHERE rn <= 2 
+0

'字段列表'中的未知列'組':( – amanda014

+0

等待我正在更新... – 2016-03-07 12:27:57

+0

@ amanda014 - 我更新了SQL,檢查了一次... – 2016-03-07 12:29:04

0

試試這個:

SELECT x.* 
    FROM my_table x 
    JOIN my_table y 
    ON y.category_id = x.category_id 
    AND y.timestamp >= x.timestamp 
GROUP 
    BY x.category_id,x.timestamp 
HAVING COUNT(*) <= 2; 
+0

現在,這很簡單,工作,謝謝。 – amanda014