Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-考虑到工作日的每日价值变化_Sql_Ms Access 2013 - Fatal编程技术网

SQL-考虑到工作日的每日价值变化

SQL-考虑到工作日的每日价值变化,sql,ms-access-2013,Sql,Ms Access 2013,您好,我正在尝试编写一个查询,该查询将跟踪在周末/假日未填充的列的每日更改 首先,我的数据如下所示: Date Value 11/5/2015 10 11/6/2015 11 11/9/2015 12 11/10/2015 12 11/11/2015 11 因此,我希望我的查询给出每个日期相对于前一个工作日的值更改结果,以返回如下内容: Date Change in Value since previous

您好,我正在尝试编写一个查询,该查询将跟踪在周末/假日未填充的列的每日更改

首先,我的数据如下所示:

Date           Value
11/5/2015      10
11/6/2015      11
11/9/2015      12
11/10/2015     12
11/11/2015     11
因此,我希望我的查询给出每个日期相对于前一个工作日的值更改结果,以返回如下内容:

Date           Change in Value since previous business day
11/5/2015       -
11/6/2015       1
11/9/2015       1
11/10/2015      0
11/11/2015      -1
如何在MS Access中编写查询,跟踪工作日内的每日变化?目前,我已经写了以下内容,它只返回一个日历日的每日变化,而不是一个工作日。所以它不会在周一归还任何东西

    SELECT A.Date, A.Value, ( A.Value - B.Value) as [Daily change]
    FROM Table as A INNER JOIN Table as B on (A.date = B.date+1) 
=============================================================================

感谢各位,我已经尝试了所有3个建议,但不幸的是,它们都不起作用:还有一个专栏名为product ID,也许这就是为什么?换句话说,在每一天,每个产品ID都会有自己的不同值。总共有100个产品ID,因此在每个日期有100个不同的值,我希望跟踪100个产品ID中每个产品ID的每日变化。有人能帮忙吗

有点黑,但为什么不呢: 3天前也加入 使用iif表示如果1天前的差异为空,则显示3天前的差异

SELECT
  A.Date, A.Value,  
  iif (isNull( A.Value - B.Value), ( A.Value - C.Value), ( A.Value - B.Value)  ) as [change since last biz day]
FROM [Table] as A  
  left JOIN [Table] as B on ( A.Date = B.Date + 1  )
  left JOIN [Table] as C on ( A.Date = C.Date + 3  )

有时候我只是用英语说了很多次,SQL也跟着说。你想要它,其中B等于小于A的最大日期

    SELECT A.Date, 
     A.Value,
     A.Value - B.Value as [Daily Change]
     FROM MyTable as A
     INNER JOIN MyTable as B 
     ON B.date = (SELECT MAX(C.date) FROM MyTable C WHERE C.Date < A.Date)
     ORDER BY A.Date