MySQL-仅选择上次修改的(或空值)

MySQL-仅选择上次修改的(或空值),mysql,sql,Mysql,Sql,我有一个MySQL数据库表,其结构如下: +----+---------+---------+---------------------+ | id | item_id | name | modified | +----+---------+---------+---------------------+ | 1 | 1829 | Item 1 | 2013-10-20 20:42:34 | | 2 | 1737 | Item 2 | 2013-1

我有一个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
但我想知道,如果没有内部选择,是否可能(因为这只是一个示例,我将在更复杂的查询中使用它)

谢谢你的时间和回答

试试看

SELECT *
FROM db_items 
GROUP BY item_id
ORDER BY modified DESC

您不能添加另一个布尔字段,该字段表示“最新”,默认为true,并且在插入具有相同ID的新项目后将设置为false吗?虽然这可能是一个完全正确的答案,但随着时间的推移,它可能会不一致,从而在不是最后一次修改时产生“最新日期=true”。最后修改的字段必须考虑在内。谢谢你的回答和你的时间!如果我尝试这样做,我得到的是一个按项目id分组的组,并从该组中按修改日期排序。但是从GROUP BY中选择的行可能不是我想要选择的行(例如,如果它从每个组中选择最后一个“id”,则它不会是最后一个“修改的”——尽管有时它们可能是相同的)。谢谢你的回答!如果该列的类型是say
TIMESTAMP
,则它们将按时间排序。或者您可以从组中选择
MAX(modified)