【问题标题】:Getting latest entries from the revision table in mysql从 mysql 中的修订表中获取最新条目
【发布时间】:2014-01-22 13:11:20
【问题描述】:

我有一个修订数据库表,其中包含网站(webId)下页面(pageId)的多个修订。我想编写一个查询以仅获取网站的最新修订。例如,下表显示了两个带有 id 的文件1 和 2,现在我想获得修订号 101 和 104,因为它们是各自页面的最新版本。我正在使用 mysql

+----+---------+-------------+---------------------+-------+---------------------+
| id | userId  | webId       |revisionCont         | pageId| dateUpdated         |
+----+---------+-------------+---------------------+-------+---------------------+
| 100|       1 |           2 | some text           | 1     | 2014-01-07 08:00:00 |
| 101|       1 |           2 | some text           | 1     | 2014-01-07 08:01:00 |
| 103|       2 |           2 | some text           | 2     | 2014-01-07 08:15:32 |
| 104|       2 |           2 | some text           | 2     | 2014-01-07 09:10:32 |
+----+---------+-------------+---------------------+-------+---------------------+

我不知道该怎么做?有人可以指导我吗?

【问题讨论】:

  • 没想到这么简单!谢谢您的回答!

标签: mysql sql database


【解决方案1】:

试试这个

 SELECT max(id) id FROM revision 
 GROUP BY pageId

DEMO HERE

输出:

ID
104
101

编辑:如果您需要过滤或订购输出,则只需添加 ORDER BY dateUpdated DESC

【讨论】:

  • +1 。 . .这个答案是正确的。但是,您不需要order by
  • @GordonLinoff 是的,谢谢 :) ,我删除了订单,如果他以后需要,这取决于他
  • 如果您了解修订的顺序是由于 dateUpdated 字段,那么您确实需要它来过滤最后一个
  • @eKek0 。 . . OP 没有说明 latest 是基于 id 还是 dateUpdated。为此目的使用自动递增的 id 是合理的。鉴于答案被接受,这似乎是一个正确的假设。
【解决方案2】:

要获得完整的行,请执行以下操作:

SELECT * FROM revision WHERE Id IN (
  SELECT MAX(id) FROM revision GROUP BY pageId ORDER BY dateUpdated DESC
)

【讨论】:

  • 接受这一点,因为我需要完整的行。之前的答案很接近,但正如@eKek0 指出的那样,我没有假设其他事情。我只是检查了小提琴并假设它有效。可能按照 SO 规则这必须是最合适的。为错误道歉。
【解决方案3】:
SELECT MAX(id) id FROM revision GROUP BY pageId

应该这样做。

【讨论】:

  • 见评论@Legionar 的回答。
【解决方案4】:

这里是查询示例:

SELECT id FROM revision GROUP BY pageId ORDER BY dateUpdated DESC

它将获取每个pageId的所有记录ID(101和104),按dateUpdated(降序)排序

【讨论】:

  • 不错的一个!对于未来的访问者:添加一些查询说明 GROUP BY 和 ORDER BY 在这种情况下的作用。 :)=
  • 此查询不保证有效。事实上,如果确实如此,那是巧合。 MySQL 文档明确地警告不要在聚合查询中选择任意列的查询 (dev.mysql.com/doc/refman/5.7/en/group-by-extensions.html)。再加上order by 无论如何都会发生在group by 之后。
猜你喜欢
  • 2019-01-17
  • 2016-01-18
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
相关资源
最近更新 更多