Mysql 按日期将累积值序列转换为非累积值

Mysql 按日期将累积值序列转换为非累积值,mysql,Mysql,使用mysql是否可以获得给定日期范围内累积值的总和 假设数据是这样的(不需要从星期六开始的累积周列,只是为了显示变化并更容易可视化): 例如,如果我询问从2016年11月3日到2016年11月4日的结果,我希望看到:3(18-15) 2016年11月3日至2016年11月7日:(18-15)+4+(6-4)+(8-6)=11 或者更好地说,上表应转换为: Date Day Value 03/11/2016 Thursday - 04/11/2016 Frid

使用mysql是否可以获得给定日期范围内累积值的总和

假设数据是这样的(不需要从星期六开始的累积周列,只是为了显示变化并更容易可视化):

例如,如果我询问从2016年11月3日到2016年11月4日的结果,我希望看到:3(18-15) 2016年11月3日至2016年11月7日:(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或其他语言中,我只想(伪代码):


理想情况下,我希望在mysql中使用我相信这是可能的。您可以使用case语句检查Saturday并将变量重新初始化回基值。在那之后,每次你都会取新值减去基值。您可能需要第二个变量来存储先前记录的原始值。根据您的示例,还有一个附加规则:如果当前日期的值小于先前日期的值,请按原样显示(参见2016年11月5日的案例)。我说的对吗?那是因为星期六的值被重置了,所以星期六的值保持不变。这些值是某些销售数据的累积浪费。今天的值不可能小于昨天的值,除非是星期六。基本上,要找到一天的值,你只需从上一天减去,除非是星期六,用0减去,我相信这是可能的。您可以使用case语句检查Saturday并将变量重新初始化回基值。在那之后,每次你都会取新值减去基值。您可能需要第二个变量来存储先前记录的原始值。根据您的示例,还有一个附加规则:如果当前日期的值小于先前日期的值,请按原样显示(参见2016年11月5日的案例)。我说的对吗?那是因为星期六的值被重置了,所以星期六的值保持不变。这些值是某些销售数据的累积浪费。除非是星期六,否则当前日期的值不可能小于昨天的值。基本上,要找到一天的值,只需从前一天减去,除非是星期六,减去0
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;
If (day != Saturday) {value = currentvalue-yesterdayvalue} else {value = currentvalue)
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;