Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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 - Fatal编程技术网

Sql 如何根据事件计算趋势

Sql 如何根据事件计算趋势,sql,Sql,我必须尝试根据以下内容计算客户的趋势: 4周内任何2个0销售实例 比如说- 在第27周和第36周之间,该特定商店在第27周和第32周之间的销售额为0。 然后在第33周和第35周之间进行销售,最后一周的销售为0 我的完整数据集包含每个人的多个存储,为了解释的清晰起见,将其缩减 结果我在追求 我需要一个人的总数,每周,所有的商店有2个实例的0销售在过去4周 因此,对于这家商店,我希望在第27周到第34周看到1的值,因为在这段时间内,每一周,该周和前3周至少有2个销售实例为0 第35周和第36周应为0

我必须尝试根据以下内容计算客户的趋势:

4周内任何2个0销售实例

比如说-

在第27周和第36周之间,该特定商店在第27周和第32周之间的销售额为0。 然后在第33周和第35周之间进行销售,最后一周的销售为0

我的完整数据集包含每个人的多个存储,为了解释的清晰起见,将其缩减

结果我在追求

我需要一个人的总数,每周,所有的商店有2个实例的0销售在过去4周

因此,对于这家商店,我希望在第27周到第34周看到1的值,因为在这段时间内,每一周,该周和前3周至少有2个销售实例为0

第35周和第36周应为0,因为这两周在4周中至少有3周有销售

到目前为止我已经知道了,但不太正确


任何帮助都将不胜感激……

如果我理解正确,您需要一个基于前四行零销售额累计计数的标志。如果是,您可以使用窗口功能:

select s.*,
       (case when sum(case when TotalSales = 0 then 1 else 0 end) over
                      (partition by customerid, person
                       order by year, week
                       rows between 3 preceding and current row
                      ) >= 2
             then 1 else 0
        end) as flag
from Sales s;

是一个数据库文件。

编辑您的问题,提供一个数据库标签,并显示您想要的结果。我不知道你想要什么结果。嗨,戈登,太好了。没想到我离得那么远。。只是不能完全到达那里
select s.*,
       (case when sum(case when TotalSales = 0 then 1 else 0 end) over
                      (partition by customerid, person
                       order by year, week
                       rows between 3 preceding and current row
                      ) >= 2
             then 1 else 0
        end) as flag
from Sales s;