我正在做一个评论表,我无法弄清楚这个查询。这些注释将在此应用程序的特定数据记录下,这是comment_number所指的。创建评论时,会为其分配记录'评论编号' ..评论编号+ date_added标识每个特定评论。如果更新/编辑注释,而不是更新记录本身,它将在表中创建具有相同comment_number和date_added的另一个条目,并创建一个新的date_modified。这是由于合规性问题。我必须能够回到那段特定评论的历史中。
以下是表格说明:
+----------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------- +---------------+------+-----+---------+-------+
| comment_number | varchar(64) | YES | | NULL | |
| comment | varchar(2048) | YES | | NULL | |
| date_added | datetime | YES | | NULL | |
| date_modified | datetime | YES | | NULL | |
| is_deleted | tinyint(1) | YES | | NULL | |
| date_deleted | datetime | YES | | NULL | |
+--------------- +---------------+------+-----+---------+-------+
因此,不同的评论将具有相同的评论编号,但会有不同的' date_added'领域。历史上特定评论的不同版本将具有相同的评论编号'和' date_added'价值,但不同的&date.dmodified'领域。
所以我需要提取所有评论的最新修改版本的所有字段。我一直在使用MAX()函数以及GROUP BYs,但我还没有得到正确的结果。
非常感谢任何帮助。
答案 0 :(得分:1)
您可以在查询中使用ORDER BY date_modified,然后将LIMIT设置为1.确定是否需要ASC(从低到高)或DESC(从高到低)以获得所需的字段作为第一个结果。
答案 1 :(得分:1)
要为每条评论获取最新的date_modified,您需要这样的查询:
SELECT
comment_number,
date_added,
MAX(date_edited) AS max_date_edited
FROM
tablename
GROUP BY
comment_number,
date_added
要获取最新版本的评论,您需要加入此查询的结果:
SELECT c.*
FROM
table_name c INNER JOIN (
SELECT
comment_number,
date_added,
MAX(date_edited) AS max_date_edited
FROM
tablename
GROUP BY
comment_number,
date_added
) m ON c.comment_number=m.comment_number
AND c.date_edited = m.max_date_edited