Mysql 从sql数据库中选择不同语言的条目的最后版本
有没有办法在一个sql查询中实现这一点?我想得到每种语言的同一条目的最新版本 我的表格和示例数据如下:Mysql 从sql数据库中选择不同语言的条目的最后版本,mysql,sql,database,Mysql,Sql,Database,有没有办法在一个sql查询中实现这一点?我想得到每种语言的同一条目的最新版本 我的表格和示例数据如下: ID | Index | Version | Language | ... ------------------------------------------------ 1 1 1 1 test1 2 1 2 1 test2 3
ID | Index | Version | Language | ...
------------------------------------------------
1 1 1 1 test1
2 1 2 1 test2
3 2 1 1 test3
4 2 1 2 test4
5 2 1 3 test5
6 2 2 3 test6
7 3 1 1 test7
8 3 1 2 test8
ID是唯一的标识符
索引对于数据库中的任何条目都是唯一的,这意味着同一文章/条目的所有时间版本和语言版本共享相同的索引。
版本显然是版本号。1是第一个版本,任何较大的数字通常都是较新的。
Language是条目/文章的语言版本号。
我真的想不出在一个查询中得到这个结果的方法。但也许这是可行的
我想得到这样的东西:
ID | Index | Version | Language | ...
------------------------------------------------
2 1 2 1 test2
3 2 1 1 test3
4 2 1 2 test4
6 2 2 3 test6
7 3 1 1 test7
8 3 1 2 test8
test1退出,因为test2使用相同的语言,而且更新
test5已退出,因为test6在同一语言中较新
断然的
编辑:我假设ID在增加,最新的是最后一个
也许可以试试这个:
SELECT T1.ID, T1.Index, T1.Version, T1.Language FROM Table T1
LEFT JOIN Table T2 ON (T1.Version < T2.Version AND T1.Language = T2.Language)
WHERE T2.ID IS NULL
那怎么办
选择S.*
从…起
选择T1*
从入口视图T1
按T1订购。版本描述
s
按语言分组
请参阅其他一些标有“每组最多n个+1”的问题。避免使用聚合的好技巧。第二个似乎更合适。是的,我是这么早在这里学到的!-我相信这是一个快得多的解决方案。从这里创建视图是不可能的吗?它会很有用。@Simon:快还是不快,我更喜欢你的而不是我的。我使用第二个查询是因为我可以将它放到视图中,而我不能使用Andrey M解决方案,因为视图中没有子查询。哪一个更快?内部连接还是左连接?@Kaminari:作为一个一般性的问题,我认为它太宽泛了,无法明确回答。说到这个特殊的解决方案,问题不在于哪个更快,而在于哪个能带来正确的结果。在这种情况下,LEFT JOIN将返回表中的所有行,据我所知,这不是您所需要的。我正在尝试创建视图以缩短查询。大多数情况下,我只需要文章的最新版本,但似乎无法在视图中使用JOIN:@Kaminari:我的解决方案中的子查询返回每个索引项的每个翻译的最后版本号。你可以把它当作一个视图。当然,如果它返回完整的行以及ID和文本部分会更好。尽管如此,它还是允许您在一定程度上缩短查询。
SELECT T1.ID, T1.Index, T1.Version, T1.Language FROM Table T1
LEFT JOIN Table T2 ON (T1.ID < T2.ID AND T1.Language = T2.Language)
WHERE T2.ID IS NULL
SELECT T1.ID, T1.Index, T1.Version, T1.Language FROM Table T1
LEFT JOIN Table T2 ON (T1.Version < T2.Version AND T1.Language = T2.Language)
WHERE T2.ID IS NULL
SELECT t.*
FROM atable t
INNER JOIN (
SELECT
Index,
MAX(Version) AS MaxVersion,
Language
FROM atable
GROUP BY Index, Language
) max ON t.Index = max.Index AND t.Version = max.MaxVersion
AND t.Language = max.Language