[英]how to check given date is in range on table records
这是我无法解决的问题:我在交易表上有一个特殊索引号,每年我都会重置此特殊索引号。这是代码。
SELECT IFNULL(MAX(Index),0)+1 as Index_Number FROM Transactions WHERE YEAR(Create_Date) = '2016'
我对此查询没有问题,它的工作正常,如果我们认为记录数据的日期是:
id | index | create_date
1 | 7 | 2016-01-01
2 | 8 | 2016-01-03
在日期2016-01-02中输入数据时,标识2的索引号必须为9。新添加的数据的索引号必须为8。
换句话说,最终状态应为:
id | index | create_date
1 | 7 | 2016-01-01
3 | 8 | 2016-01-02
2 | 9 | 2016-01-03
我怎样才能做到这一点?
我忘记提及索引号根据每个人而有所不同,所以我不能使用auto_increment。
根据您的示例,它应该是这样的:
set @userinput = '2016-01-02';
set @i = (SELECT ifnull(min(index),1) FROM FROM Transactions WHERE YEAR(Create_Date) = '2016') and Create_Date > @userinput;
update Transactions set index = index+1 WHERE YEAR(Create_Date) = '2016') and index >= @i;
insert into Transactions (`index`,`Create_Date`) values (@i, @userinput);
因此,首先您要在最小索引中搜索要输入的日期(对于特定年份)而言更大的日期,
然后更新日期较大但同一年的行的所有“索引”,将其移位
最后插入新行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.