我有一个表,其中包含一个带日期的字段(称为日期)和一个累计运行总计的字段(称之为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);
提前致谢!!
答案 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`