我试图获取每条记录的最新版本。例如,我试图获取id 13的版本2而不是版本1和版本2,我尝试使用带有MAX
函数的子查询,但它没有做到任何不同的。
表td_asset
上的主键是PRIMARY KEY(ass_id, ass_version)
。
** SQL查询**
SELECT `ass_id` AS `id`
, `ass_title` AS `name`
, `ass_version` AS `version`
FROM `td_asset`
GROUP BY `ass_id`, `ass_version`
ORDER BY `id` DESC, `ass_version` DESC;
SQL查询结果
id name version
13 test name 2
13 test name 1
12 test name 1
11 test name 1
10 test name 1
9 test name 1
8 test name 1
7 test name 1
6 test name 1
5 test name 1
4 test name 1
3 test name 1
2 test name 1
1 test name 1
非常感谢任何建议/想法。
答案 0 :(得分:1)
虽然 这个问题很多,但有时很难让其他人的问题适应您的情况。因此,处理此问题的一种方法是使用子查询。
SELECT
tda.ass_id AS id,
tda.ass_title AS name,
tda.ass_version AS version
FROM td_asset tda
WHERE tda.version = (SELECT MAX(tda2.version) FROM td_asset td2 WHERE tda2.id = tda.id)
GROUP BY tda.ass_id
这基本上说,每个id,查找最大版本并使用该记录。
还有其他方法可以解决这个问题,这只是其中之一。
答案 1 :(得分:-2)
只需选择MAX(ass_version)
并仅按ass_id
分组:
SELECT `ass_id` AS `id`
, `ass_title` AS `name`
, MAX(`ass_version`) AS `version`
FROM `td_asset`
GROUP BY `ass_id`
ORDER BY `id` DESC, `ass_version` DESC;