1

首先让我说我对 SQL/Snowflake 有点陌生,并且已经将查询放在一起大约 2 个月。我的某些查询语言可能并不理想,我完全理解是否有更好、更有效的方式来执行此查询。任何和所有输入表示赞赏。此外,这个特定的查询正在 Snowflake 中开发。

我当前的查询是基于 45 天窗口按部门和日期拉客户量,从当前日期回溯 24 天,根据预定约会向前看 21 天。每个日期都根据它在 45 天窗口内的位置进行分组:本周(今天到接下来的 7 天)、第 1 周(前瞻性第 8-14 天)和第 2 周(前瞻性第 15-21 天)。我一直在努力构建一个比较列,对于第 1 周或第 2 周组内的任何日期,该列将从前 14 天(第 1 周)或前 21 天(第2)但我无处可去。这种类型的列是否有最佳实践?附上当前输出的通用示例。请注意,“前一周”

我尝试了几种不同的 count(case...) 迭代,类似于下面列出的;但是,“Prior Wk”列返回的是同一天的遭遇/预定遭遇的计数,而不是 14 天或 21 天前发生的那些。

Count(Case When datediff(dd,SCHED_DTTM,getdate()) 
      between -21 and -7 then 1 else null end
) as "Prior Wk"

我尝试使用如下所示的 IFF 语句,但没有返回值。

(IFF(ENCOUNTER_DATE > dateadd(dd,8,getdate()),
 count(case when ENC_STATUS in (“Phone”,”InPerson”) AND
 datediff(dd,ENCOUNTER_Date,getdate()) between 7 and 14 then 1 
 else null end), '0')
) as "Prior Wk"

还尝试创建和使用临时表(包括示例),但未能成功从临时表中提取信息,这些信息并未完全破坏我的遭遇/计划计数。请注意,对于这种方法,我只关注 14 天组,还没有开始关注 21 天/第 2 周组。我尝试使用临时表来解决围绕以下子句的问题(临时表别名:“Date1”):

CASE when AHS.GL_Number = "DATEVISIT1"."GL_NUMBER" AND 
  datevisit1.lookback14 = dateadd(dd,14,PE.CONTACT_Date)
then "DATEVISIT1"."ENC_Count" 
else null end 
as "Prior Wk"*

我非常感谢有关当前最佳实践的任何见解,这些最佳实践是将前期数据拉入当前期间数据旁边的列中。我对术语的任何滥用都不是故意的。

查询输出示例

临时表示例

4

1 回答 1

0

我很难理解您的要求,但听起来您需要使用窗口函数https://docs.snowflake.com/en/sql-reference/functions-analytic.html,在这种情况下可能是 SUM 窗口函数。LAG 窗口函数https://docs.snowflake.com/en/sql-reference/functions/lag.html也可能有所帮助

于 2021-05-25T16:45:52.783 回答