选择每月每件商品的最新行数

时间:2013-12-07 15:19:55

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

我希望创建库存项目摘要,显示每个月的最新行。

例如,我的表格有:

id, date, item, quantity

我希望每个项目每个项目返回一行,显示每月报告的数量。

类似的东西:

1, (July datetime), Banana, 5
3, (July datetime), Apple, 2
4, (August datetime), Banana, 6
8, (August datetime), Apple, 8

感谢您的帮助!!

到目前为止我尝试过的是:

SELECT t1.*
FROM inventory t1
WHERE t1.date = (SELECT MAX(t2.date)
             FROM inventory t2
             WHERE t2.item = t1.item)

当然,这会显示每个项目的最新行...但不会显示每个月。

1 个答案:

答案 0 :(得分:0)

MySQL GROUP BY扩展允许您以下列方式执行此操作

SELECT id, date, item, quantity
  FROM
(
  SELECT id, date, item, quantity
    FROM inventory
   ORDER BY item, date DESC
) q
 GROUP BY YEAR(date), MONTH(date), item

更标准的方法是先每个项目每月拉出最大日期,然后再加入inventory以获取所有其他字段

SELECT i.id, i.date, i.item, i.quantity
  FROM
(
  SELECT item, MAX(date) date
    FROM inventory
   GROUP BY item, YEAR(date), MONTH(date) 
) q JOIN inventory i
    ON q.item = i.item
   AND q.date = i.date
 ORDER BY YEAR(i.date), MONTH(i.date), i.item

这是 SQLFiddle 演示