MYSQL - 使用包含假日的日期行查找行增量

时间:2018-04-26 18:10:36

标签: mysql finance

我有一个表,其中包含一个带日期的字段(称为日期)和一个累计运行总计的字段(称之为X)|称之为表SAMPLE。

***我在DATE字段中的数据不包括周末和假日。

我可以通过简单地减去“X”中的任何选定值并从上面的行中减去该值来逐日找到数字中的增量。

这是我当前的查询:

>>> im
[[[20. 20. 20.]
  [20. 20. 20.]
  [20. 20. 20.]
  [20. 20. 20.]
  [20. 20. 20.]]

 [[20. 20. 20.]
  [20. 20. 20.]
  [21. 22. 23.]
  [24. 25. 26.]
  [27. 28. 29.]]

 [[30. 31. 32.]
  [33. 34. 35.]
  [36. 37. 38.]
  [39. 40. 41.]
  [42. 43. 44.]]

 [[45. 46. 47.]
  [48. 49. 50.]
  [51. 52. 53.]
  [54. 55. 56.]
  [57. 58. 59.]]

问题是上述值一直有效,直到我点了假日日期。如果星期一是假日,那么值将返回null,因为a.date - interval 1天将不存在。解决假期问题的最佳方法是什么?

以下是目前的结果:

select
date,
a.X - b.X as 'Daily Total'

from SAMPLE as a 
left join SAMPLE as b
on b.date = if(weekday(a.date) = 0 , a.date - interval 3 day, a.date- interval 1 day);

提前致谢!!

1 个答案:

答案 0 :(得分:0)

我将按日期对表格进行排序,然后分配从1到n的序列或一系列数字。然后,我将从第一行中除去前一行的当前行的值。对于第一行,我将复制值X。

select rnk2.`date`, 
case when rnk1.r1=1 and rnk2.r2=1 then rnk1.X else rnk2.X-rnk1.X end as 'Daily Total'
from (
  select `date`,X,@r1:=@r1+1 as r1
  from  samples, (select @r1:=0) a 
  order by `date` ) rnk1
inner join 
  (select `date`,X,@r2:=@r2+1 as r2
   from  samples, (select @r2:=0) b
   order by `date`) rnk2
on (rnk1.r1=1 and rnk2.r2=1) or (rnk1.r1+1=rnk2.r2) 
order by rnk2.`date`