【发布时间】:2018-10-07 12:55:45
【问题描述】:
我有一个表格,其中包含一个带有日期的字段(称为日期)和一个带有累积运行总计的字段(称为 X)|称它为表样本。
***我在 DATE 字段中的数据不包括周末和节假日。
我可以通过简单地减去“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 - 间隔 1 天将不存在。解决假期问题的最佳方法是什么?
以下是目前的结果:
+------------+---------------+
| 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 |
提前致谢!!
【问题讨论】:
-
如果星期一是假期,正确的逻辑是什么?从周日开始?将其设置为零?
-
如果周一是节假日,从上周五开始获取。谢谢你的提问。澄清一下,日期字段是不包括周末和节假日的工作日。所以基本上如果星期一是假期,那么我希望 a.date(星期二)从 b.date(星期五)中减去。
-
到目前为止我有这个“b.date = if(weekday(a.date) = 0, ifnull(a.date - 间隔 3 天,a.date - 间隔 4 天), ifnull( a.date - 间隔 1 天,a.date - 间隔 4 天))“但由于某种原因我仍然得到 Null 值....
-
您不能减去 4,因为星期五也可能是假期。会解决这个问题。
-
说得好,你太棒了,谢谢!