MySQL - 仅选择最后修改的(或NULL值)

时间:2013-11-05 10:37:41

标签: mysql sql

我有一个MySQL数据库表,其结构如下:

+----+---------+---------+---------------------+
| id | item_id |  name   |      modified       |
+----+---------+---------+---------------------+
|  1 |    1829 | Item 1  | 2013-10-20 20:42:34 |
|  2 |    1737 | Item 2  | 2013-10-25 12:33:01 |
|  3 |    1829 | Item 3  | 2013-10-22 18:47:22 |
|  4 |    1737 | Item 2b | 2013-10-29 21:12:29 |
|  6 |    1829 | Item 3b | NULL                |
+----+---------+---------+---------------------+

我想做的是,在一个唯一的查询中,获取所有项目,但如果重复只获得那些更新的(修改的字段是更新的)或其修改的字段是空的。

所以,我对这张表的看法是:

+----+---------+---------+---------------------+
| id | item_id |  name   |      modified       |
+----+---------+---------+---------------------+
|  1 |    1829 | Item 1  | 2013-10-20 20:42:34 |
|  4 |    1737 | Item 2b | 2013-10-29 21:12:29 |
|  6 |    1829 | Item 3b | NULL                |
+----+---------+---------+---------------------+

我可以通过第二个选择来做到这一点,例如:

SELECT db_items.item_id, db_items.name, db_items.modified  
FROM (SELECT item_id, name, modified 
    FROM db_items 
    ORDER BY modified DESC) db_items 
GROUP BY item_id

但我想知道是否有可能没有内部SELECTS(因为这只是一个例子而且我会在更复杂的查询中使用它)。

感谢您的时间和答案!

1 个答案:

答案 0 :(得分:1)

试试

SELECT *
FROM db_items 
GROUP BY item_id
ORDER BY modified DESC