【问题标题】:Need to select 5 latest records order by category?需要按类别选择 5 条最新记录吗?
【发布时间】:2011-12-15 04:31:36
【问题描述】:

我需要选择每个品牌类别的五个最新产品,然后按类别分组显示这些结果。

MySQL 数据库的样子;

product

product_id (pk) 
product_name 
product_etc 
product_publish_date 
brand_id (fk)

brand

brand_id (pk) 
brand_name

结果应该如下所示...

brand_a product k
brand_a product a
brand_a product h
brand_a product l
brand_a product 33

brand_b product h
brand_b product z
brand_b product 9
brand_b product ddd
brand_b product a

试过

【问题讨论】:

  • SELECT * FROM product GROUP BY brand_id ORDER BY product_publish_date LIMIT 5
  • 你遇到了什么问题?
  • 我的查询只返回了 5 个结果(限制为 5),我最初尝试像上面那样做一堆查询但加入它们/联合但我一定有太多语法错误,最后我想实现我的目标可能是一种糟糕的方式(性能)。
  • 我用了这个solution,有10个分类,每个分类有50个产品。这不会经常改变,所以希望它就足够了,即使它不是最雄辩的

标签: mysql sql greatest-n-per-group


【解决方案1】:

尝试:

SELECT p.*
FROM product p1
LEFT OUTER JOIN product p2
  ON (p1.brand_id = p2.brand_id AND p1.product_id < p2.product_id)
GROUP BY p1.item_id
HAVING COUNT(*) <= 5
ORDER BY brand_id, product_publish_date;

正如比尔·卡尔文所说,这与他的链接中的问题相同 - 我的回答只是根据您的情况对该答案的改编。

【讨论】:

    【解决方案2】:
    select brand_name, product_name, count(*)
    from brand
    INNER JOIN product on brand.brand_id = product.brand_id
    order by product_publish_date
    group by brand_name, product_name
    having count(*) <= 5
    

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2010-09-15
      相关资源
      最近更新 更多