我需要对现有的查询进行帮助,然后对其进行扩展。查询是:
,COUNT (DISTINCT
(CASE
WHEN EventDate between DATEADD(day, -56, @STARTDATE) AND DATEADD(day, -29, @STARTDATE) THEN EventId
END)
) PrevMonth
我现在需要对此进行扩展以添加一些条件。这些条件的一些解释如下:
对于每个EventId(遇到客户),我们都有一个复杂度等级(数字值)。每个EventId都有多行,涉及相遇,合同的生命周期。
修改现有条件,以返回EventId的唯一计数,其中该EventId返回的最低复杂度值。
因此,对于指定的日期范围(按EventId分组),我需要能够基于最低的复杂度计数获得计数。这应该让我知道EventId(客户遇到的情况)如何,最低的复杂性级别是特定值。
我知道我可以使用MIN函数从单个EventId下的所有遭遇中返回最小值。
我只是对如何将它们组合在一起以获得我想要的答案感到困惑。建议将不胜感激。
完整查询是:
Declare @temp table(YTD_Previous float, YTD_Current float, TwentyEightDays float, FiftySixDays float)
insert into @temp
SELECT
COUNT (DISTINCT (CASE when EventDate between DATEADD(YEAR, DATEDIFF(YEAR, 0,DATEADD(YEAR,-1, @STARTDATE)), 0) and DATEADD(Year,-1,@STARTDATE) then EventId END)) YTD_Previous
,COUNT (DISTINCT (CASE when EventDate between DATEADD(YEAR, DATEDIFF(YEAR, 0,DATEADD(YEAR,-0, @STARTDATE)), 0)and DATEADD(Year,-0,@STARTDATE) then EventId END)) YTD_Current
,COUNT (DISTINCT (CASE when EventDate between DATEADD(YEAR,-0,DATEADD(DAY, DATEDIFF(DAY, 0, @STARTDATE), -28)) and DATEADD(Year,-0,@STARTDATE) then EventId END)) TwentyEightDays
,COUNT (DISTINCT (CASE WHEN EventDate between DATEADD(day, -56, @STARTDATE) AND DATEADD(day, -29, @STARTDATE) THEN EventId END)) FiftySixDays
FROM Transaction
WHERE Region IN (@Region)
SELECT
YTD_Current
, YTD_Previous
, case when (YTD_Previous - YTD_Current) = 0 then 0 when YTD_Previous = 0 then YTD_Current else (YTD_Current - YTD_Previous) / YTD_Previous end YTD_Chg
, TwentyEightDays
, FiftySixDays
, Case when (FiftySixDays - TwentyEightDays) = 0 then 0 when FiftySixDays = 0 then TwentyEightDays else (TwentyEightDays - FiftySixDays) / FiftySixDays end WEEK_Chg
FROM @temp
答案 0 :(得分:0)
我花了一些时间对此问题进行其他研究。我的问题之一是,我没有接受过任何培训,因此,该术语对我来说是一个严重的弱点。
我一直试图做的就是合并查询,以便减少数据集的数量。解决我的问题的方法如下:
SELECT DISTINCT
(从DATEADD(YEAR,DATEDIFF(YEAR,0,DATEADD(YEAR,-1,@STARTDATE)),0)和DATEADD(Year,-1,@ STARTDATE)之间的事务WHERE EventDate中选择COUNT(DISTINCT EventId) AND区域IN(@Region)A,
(从DATEADD(YEAR,DATEDIFF(YEAR,0,DATEADD(YEAR,-0,@STARTDATE)),0)和DATEADD(Year,-0,@ STARTDATE)之间的事务WHERE EventDate中选择COUNT(DISTINCT EventId)个AND Region IN(@Region)B
FROM交易
这不包含我需要的所有子查询,但应该向您显示我要去的地方。