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

时间:2016-11-23 21:35:44

标签: mysql database tsql

这是我无法解决的问题: 我在事务表上有一个特殊的索引号,我每年都会重置这个特殊的索引号。这就是代码。

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日期输入数据时,id 2的索引号必须为9.新添加数据的索引号必须为8.

换句话说,最终状态应为:

 id | index | create_date
  1 |   7   |  2016-01-01
  3 |   8   |  2016-01-02
  2 |   9   |  2016-01-03

我该怎么做?

我忘了提到索引号因人而异,所以我不能使用auto_increment。

1 个答案:

答案 0 :(得分:0)

根据你的例子,它应该是这样的:

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);

因此,首先搜索最小索引,查找输入的日期(特定年份),

然后你更新日期更长但同年的行的所有“索引”,将其移动

最后插入新行