【问题标题】:Select rows by column with condition Mysql使用条件Mysql按列选择行
【发布时间】:2016-03-06 16:44:53
【问题描述】:

我有一个表(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 |
+-------------+------+---------------------+

【问题讨论】:

  • 哦,任何一个都可以。由于我的工作表中有很多列,因此我决定使用上述简化表,这些表是示例表,而不是我正在使用的确切表,任何建议都可以对我有所帮助,谢谢。

标签: php mysql


【解决方案1】:

它可以帮助你...

检查 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

【讨论】:

  • “字段列表”中的未知列“组”:(
【解决方案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;

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 1970-01-01
    • 2018-09-19
    • 2018-07-23
    • 1970-01-01
    • 2012-10-24
    • 2012-09-11
    • 2011-10-09
    • 1970-01-01
    相关资源
    最近更新 更多