繁体   English   中英

如何检查给定日期在表记录的范围内

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM