Mysql根据给定的范围执行速率
我在Mysql根据给定的范围执行速率,mysql,case,Mysql,Case,我在mysql中有一个下表 CREATE TABLE `mdc_tariff_slabs` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key', `type` varchar(50) DEFAULT NULL, `slab_name` varchar(50) NOT NULL COMMENT 'Name of the Slab', `slab_start` int(50) NOT NULL COMMENT 'Start of
mysql
中有一个下表
CREATE TABLE `mdc_tariff_slabs` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
`type` varchar(50) DEFAULT NULL,
`slab_name` varchar(50) NOT NULL COMMENT 'Name of the Slab',
`slab_start` int(50) NOT NULL COMMENT 'Start of the slab',
`slab_end` int(50) DEFAULT NULL COMMENT 'End of the slab',
`rate` varchar(50) NOT NULL COMMENT 'Rate of slab',
`t_id` int(11) NOT NULL COMMENT 'Tariff ID, Foriegn Key',
PRIMARY KEY (`id`),
KEY `T_ID` (`t_id`),
CONSTRAINT `T_ID` FOREIGN KEY (`t_id`) REFERENCES `mdc_tariff` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=latin1;
/*Data for the table `mdc_tariff_slabs` */
insert into `mdc_tariff_slabs`(`id`,`type`,`slab_name`,`slab_start`,`slab_end`,`rate`,`t_id`) values (1,NULL,'S-1',1,100,'10',1),(2,NULL,'S-2',101,150,'12',1),(3,NULL,'S-3',151,NULL,'14',1),(4,NULL,'S-1',1,50,'5',2),(5,NULL,'S-2',51,100,'7',2),(6,NULL,'S-3',101,NULL,'8',2),(52,'WAPDA','S-1',1,100,'12',12),(53,'WAPDA','S-2',101,150,'14',12),(54,'WAPDA','S-3',151,NULL,'16',12),(58,'Generator','S-1',1,100,'17',12),(59,'Generator','S-2',101,150,'20',12),(60,'Generator','S-3',151,NULL,'22',12);
我的生活也是如此
我有一套。在特定类型的该范围内
我想检查速率
。假设要检查的值为40
,类型为Generator
。因此,如果该值在slab范围1-100
内,则速率将为17
,反之亦然
预期产出
type |value|rate|
======================
Generator| 40 |17 |
....
我怎样才能做到这一点
非常感谢您提供的任何帮助。看起来板可能会重叠,因此您应该选择板值的
MAX
,以确保您正在处理错误数据。这很棘手,因为您已经将rate
定义为varchar。这就是为什么我在求和之前将其转换为int值。您可能对此仍有问题。我建议改为使用该列的int值
它还看起来像slab\u end
可以是NULL
,表示没有结束,因此简单的介于之间的条件对您的情况不起作用。我用或条件处理它
我会这样做:
SET @value = 40;
SET @type = 'Generator';
SELECT @type AS type,
@value AS value,
MAX(CAST(rate AS UNSIGNED)) AS rate
FROM mdc_tariff_slabs
WHERE type = @type
AND @value >= slab_start
AND (@value <= slab_end OR slab_end IS NULL);
SET@value=40;
设置@type='Generator';
选择@type作为类型,
@价值即价值,
最大(强制转换(速率为无符号))速率
来自mdc_电价_板
其中type=@type
和@value>=slab\u start
及(@value no我不想求和。我只想得到范围内的比率。如果type=Generator
并且如果该值介于1-100
之间,则该比率为17
,如果该值介于101-150
之间,则该比率为20
,如果该比率高于150
则该比率为22
,依此类推。)on@FaisalQayyum知道了-编辑了我的回复以解决这个问题