2016-03-06 3 views
1

Ну, у меня есть таблица (MYSQL) 'product', с одним из столбцов с именем «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 д Ссылка: 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

Неизвестная колонка 'group' в 'списке полей' :( – amanda014

+0

wait Я обновляю ... –

+0

@ amanda014 - Я обновил sql, проверил его один раз ... –

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

Смежные вопросы