使用mysql我需要检索在每个类别中最后插入的内容

时间:2010-04-17 09:44:18

标签: mysql

我的简要说明:

我有两个表,即类别和产品。

表:类别

id     category

1      cat1

2      cat2

3      cat3

4      cat4

表:产品

id  productName category

1    test1         1

2    test2         2

3    test3         3

4    test4         4

5    test5         2

6    test6         2

我的疑问是:

我需要在每个类别中最后插入的产品。

如何解决这个问题。

提前致谢

2 个答案:

答案 0 :(得分:0)

这是此处询问的最常见SQL问题之一的变体,即每组最大值。见例如。 this question用于各种方法。

我经常使用的是null-self-left-join,用于选择上面没有值的行:

SELECT p0.*
FROM product AS p0
LEFT JOIN product AS p1 ON p1.category=p0.category AND p1.id>p0.id
WHERE p1.id IS NULL

这假设id按顺序分配,因此最高是最新的。通常,依靠身份作为排序机制并不是一个好主意;您通常会为每行添加added个时间戳,而不是工作。

(注意这一点,当两行具有相同的顺序列时,许多其他每组最大函数可以返回多行。如果这是一个问题,可以通过使用UNIQUE排序列来避免;作为主键id已经是这样了。即使有两个最大值使用SQL,你也可以得到一行:2003的有用但相当丑陋的ROW_NUMBER() OVER窗口函数,但MySQL不支持这种情况。)

答案 1 :(得分:0)

您可以在添加新产品时添加create_time时间戳,并按类别检索最新类型:

select max(create_time),category from product group by category