基于最新版本的不同记录


distinct records based on the most recent version

我为条目列出注释,允许用户编辑现有注释,并跟踪这些修订。

表格结构:

评论:id,摘要

修订:comment_id,revision_id,时间戳

revisions.comment_id=评论.id

revisions.revision_id=新评论的id,进一步解释:当他们选择现有评论时,它会显示一个编辑表单,他们可以输入新评论并提交。它会将其作为新评论插入到评论表中,从该表中获取最后一个id,并在修订表中将其设置为revision_id。

我想在修订表上做一个选择不同(将多个comment_id、revision_id检索到应用程序中要使用的数组中):

例如:

select distinct comment_id from revisions

但是,是否可以根据最新的评论(修订。时间戳)选择合适的记录?

理论上:

从时间戳最大的修订中选择不同的comment_id

修订表示例:

comment_id   revision_id   timestamp
         2            12   20120222180000
         2            13   20120222170000
         5            18   20120222190000
         5            19   20120222200000

在这个4行的例子中,我希望查询返回两行,

即:

comment_id=2,revision_id=12时间戳=20120222180000

comment_id=5,revision_id=19时间戳=2012022220000

更新:这似乎奏效了,但请让我知道是否有更好的方法

SELECT 
 distinct comment_id, max(timestamp)
FROM
 revisions 
GROUP BY
 comment_id

UPDATE:我还需要包括revision_id,上面的查询只包括comment_id和时间戳

做到了:

SELECT 
 distinct a.comment_id as comment_id, 
 a.revision_id revision_id,
 a.timestamp as timestamp
FROM
 REVISIONS a 
WHERE
 a.timestamp = ( 
 SELECT
  max(b.timestamp)
 FROM
  revisions b
 WHERE
  b.comment_id = a.comment_id
)

如果我理解正确,您只需按时间戳降序排序,并获得第一个结果。

SELECT comment_id FROM revisions ORDER BY timestamp DESC LIMIT 0,1

编辑:我想我现在明白了,你真正想要的是什么,试试这个:

SELECT * FROM revisions GROUP BY comment_id ORDER BY timestamp DESC