繁体   English   中英

用条件 Mysql 按列选择行

[英]Select rows by column with condition Mysql

好吧,我有一个表(MYSQL)'product',其中一个名为 'category_id' 的列存储来自另一个表 'category' 的类别 id。 因此,“category_id”列中有多个类别。 例如下表。 现在我想从每个类别中选择固定数量的产品(比如 2),例如我想从产品表中的每个类别中选择 2 个最新产品。 我应该使用什么 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 |
+-------------+------+---------------------+

它可能会帮助你...

检查 SQL Fiddle 链接中的输出: 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

尝试这个 :

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM