gpt4 book ai didi

mysql - 有效地选择标记为 "latest version"的数据库行,同时匹配给定的间隔

转载 作者:行者123 更新时间:2023-11-29 00:05:32 26 4
gpt4 key购买 nike

我有一个这样的表:

id    min    max    version    data
1 1 10 1 a
2 11 20 1 b
3 21 30 1 c

4 1 10 2 a
5 11 20 2 b
6 21 30 2 c

min, max 表示 key 的值。给定版本中的每个 (min, max) 行都保证具有互斥的键间隔。

假设我有一个键值 5,我想要该键的最新版本数据。这意味着,我想选择 id = 4 的行。

通常我想选择最新版本的集合,但有时我可能会明确指定版本号。

我现在拥有的是:

select * from range_table where 5 between `min` and `max` and ver = 2;

问题:有没有办法在不明确指定的情况下自动选择最大版本(max ver)? (我所说的“高效”是指不检查所有表格行。)

重新创建表

drop table range_table;
CREATE TABLE `range_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`min` int(11) NOT NULL,
`max` int(11) NOT NULL,
`ver` int(11) NOT NULL default 1,
`data` CHAR NOT NULL,

PRIMARY KEY (`id`),
unique key ver_min_max(ver, `min`, `max`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

insert into range_table (`min`,`max`, ver, data) values
(1, 10, 1, 'a'),
(11, 20, 1, 'b'),
(21, 30, 1, 'c'),
(1, 10, 2, 'a'),
(11, 20, 2, 'b'),
(21, 30, 2, 'd');

最佳答案

你可以取第一行按ver desc...

select * from range_table where 5 between `min` and `max` order by ver desc limit 1;

关于mysql - 有效地选择标记为 "latest version"的数据库行,同时匹配给定的间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27693081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com