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

dwthyt8l  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(363)

我有一个表,其中包括一个带有日期的字段(称为date)和一个带有累计运行总数(称为x)的字段|称为表示例。

***我的野外数据不包括周末和节假日。

我可以通过简单地减去“x”中所选的任何值,然后从上面的行中减去,来找到每天数字中的增量。
以下是我当前的查询:

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

问题是,在我遇到节假日之前,上述值都是有效的。如果星期一是假日,那么这些值将返回null,因为a.date-interval 1 day将不存在。解决假期问题最好的办法是什么?
目前的结果如下:

+------------+---------------+
| date       | X             |
+------------+---------------+
| 2018-03-26 |     -40105.00 |
| 2018-03-27 |      28470.00 |
| 2018-03-28 |       5265.00 |
| 2018-03-29 |     -23010.00 |
| 2018-04-02 |          NULL |
| 2018-04-03 |     -24830.00 |
| 2018-04-04 |     -21970.00 |
| 2018-04-05 |      -9620.00 |
| 2018-04-06 |      36465.00 |

提前谢谢!!

ssm49v7z

ssm49v7z1#

我将按日期对表排序,然后指定一个从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`

相关问题