获取按类别分组的所有项目的上次更新时间

时间:2013-08-21 04:36:00

标签: mysql

这是我的项目表:

id (int)
category_id (int)
title (varchar 255)
updated_timestamp (int)

每个项目都有category_id。假设我有这些数据:

1  |  14  |  item 1  |  1376164492
2  |  11  |  item 2  |  1376164508
3  |  12  |  item 3  |  1376164512
4  |  14  |  item 4  |  1376164532
5  |  12  |  item 5  |  1376164542
6  |  11  |  item 6  |  1376164552

我的目标是为每个类别获取上次更新时间戳。 结果我需要这个:

11 = 1376164522 (greatest value for all items with category_id = 11)
12 = 1376164542 (greatest value for all items with category_id = 12)
14 = 1376164532 (greatest value for all items with category_id = 14)

这是我的SQL:

SELECT 
    `category_id`, `updated_timestamp` 
FROM 
    `my_table` 
GROUP BY 
    `category_id` 
ORDER BY 
    `updated_timestamp` 
DESC 

但是当我运行它时,我得到这样的结果:

11 = 1376164508 (lowest value for all items with category_id = 11)
12 = 1376164512 (greatest value for all items with category_id = 12)
14 = 1376164492 (greatest value for all items with category_id = 14)

换句话说,DESC不起作用。我做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

此查询允许您获取表格中的所有列。

SELECT  a.*
FROM    items a
        INNER JOIN
        (
            SELECT  category_id, MAX(updated_timestamp) updated_timestamp
            FROM    items
            GROUP   BY category_id
        ) b ON a.category_id = b.category_id AND
                a.updated_timestamp = b.updated_timestamp

答案 1 :(得分:2)

SELECT *
FROM `my_table` a
WHERE NOT EXISTS (
    SELECT 1 FROM `my_table` b
    WHERE b.`category_id` = a.`category_id`
    AND b.`updated_timestamp` > a.`updated_timestamp`
)
ORDER BY `updated_timestamp`

答案 2 :(得分:2)

通过添加MAX( updated_timestamp )

来尝试以下查询
SELECT 
    `category_id`, MAX(`updated_timestamp` )
FROM 
    `Table1` 
GROUP BY 
    `category_id` 
ORDER BY 
    `updated_timestamp` 
DESC

SQL FIDDLE DEMO