如何解决MySQL按照给定的范围执行速率
我在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,'S-2',101,150,'12',(3,'S-3',151,'14',(4,50,'5',2),(5,51,'7',(6,'8',(52,'WAPDA',12),(53,(54,'16',(58,'Generator','17',(59,'20',(60,'22',12);
我有台阶范围。在特定type
的范围内,我要检查rate
。假设要检查的值为40
,而type
为Generator
。因此,如果该值在平板范围1-100
中,则速率将为17
,反之亦然。
预期产量
type |value|rate|
======================
Generator| 40 |17 |
....
我该如何实现?
任何帮助将不胜感激。
解决方法
似乎平板可以重叠,所以您应该使用MAX
的平板值以确保您处理的是坏数据。这很棘手,因为您已将rate
定义为varchar。这就是为什么我在求和之前将其强制转换为int值。您可能仍然对此有疑问。我建议改用该列的int值。
看起来slab_end
可以是NULL
,表示无止境,因此简单的BETWEEN
条件不适用于您的情况。我在OR
条件下进行了处理。
这是我要怎么做:
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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。