将按日期累积的值序列转换为非累积值
问题描述:
是否可以使用mysql来获取累计值给定日期范围内的总和?将按日期累积的值序列转换为非累积值
假设数据是这样的(是不是需要开始上周六 - 昼列累计星期,就在那里展现的变化,更容易可视化):
Date Day Value
03/11/2016 Thursday 15
04/11/2016 Friday 18
05/11/2016 Saturday 4
06/11/2016 Sunday 6
07/11/2016 Monday 8
08/11/2016 Tuesday 10
09/11/2016 Wednesday 13
10/11/2016 Thursday 17
11/11/2016 Friday 18
12/11/2016 Saturday 2
13/11/2016 Sunday 4
14/11/2016 Monday 6
and so on...
因此,例如,如果我问了结果从2016年3月11日到2016年4月11日我期望看到:3(18-15) 从2016/11/11到07/11/2016:(18-15)+4 +(6- 4)+(8-6)= 11
或把它更好上表中应该被变换为:
Date Day Value
03/11/2016 Thursday -
04/11/2016 Friday 3
05/11/2016 Saturday 4
06/11/2016 Sunday 2
07/11/2016 Monday 2
08/11/2016 Tuesday 2
09/11/2016 Wednesday 3
10/11/2016 Thursday 4
11/11/2016 Friday 1
12/11/2016 Saturday 2
13/11/2016 Sunday 2
14/11/2016 Monday 2
在PHP或其他语言我只想去像(伪):
If (day != Saturday) {value = currentvalue-yesterdayvalue} else {value = currentvalue)
理想情况下,我想获得在MySQL
答
SELECT x.*
, CASE WHEN WEEKDAY(x.date) = 5
THEN x.value
ELSE x.value-y.value END x
FROM my_table x
LEFT
JOIN my_table y
ON y.date = x.date - INTERVAL 1 DAY;
这一个使用[MySQL用户变量(HTTP: //dev.mysql.com/doc/refman/5.7/en/user-variables.html)我相信这是可能的。你会使用case语句来检查星期六并重新初始化变量回到基值。每次之后,您都会将新价值减去基本价值。您可能需要第二个变量来存储先前记录的原始值。 – xQbert
根据您的示例,还有一条附加规则:如果当天的值小于前一个值,则按原样呈现(请参阅05/11/2016的情况)。我对吗? – FDavidov
这是因为星期六这些值会被重置,所以无论星期六保持原样。这些值是一些销售数据的累计浪费。除了星期六以外,没有办法使当天的价值会比昨天的价格低。 –