sql - 请求关于 SQL 查询的建议
问题描述
我需要获取一个我收到帮助的现有查询并对其进行扩展。查询是:
,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
解决方案
我花了一些时间对这个问题进行了一些额外的研究。我的问题之一是我没有接受过这方面的任何培训,因此,术语对我来说是一个严重的弱点。
我一直在尝试做的是整合查询,以便我可以减少数据集的数量。我的问题的解决方案如下:
选择不同的
(SELECT COUNT(DISTINCT EventId) FROM Transaction WHERE EventDate between DATEADD(YEAR, DATEDIFF(YEAR, 0,DATEADD(YEAR,-1, @STARTDATE)), 0) AND DATEADD(Year,-1,@STARTDATE) AND Region IN (@Region))一个,
(SELECT COUNT(DISTINCT EventId) FROM Transaction WHERE EventDate between DATEADD(YEAR, DATEDIFF(YEAR, 0,DATEADD(YEAR,-0, @STARTDATE)), 0) AND DATEADD(Year,-0,@STARTDATE) AND Region IN (@Region)) B
从交易
这不包含我需要的所有子查询,但应该告诉你我要去哪里。
推荐阅读
- python - python在字典中附加一个带有字典的数组
- dictionary - 如何在 Map 中找到最小元素并返回一个元组(键,最小元素)?
- excel - 为什么当我在 excel VBA 上运行这个宏时什么都没有发生?我错过了什么吗?
- html - 为什么我的第一行的高度大于其他行 HTML
- python - 如何在单个 Django 视图中跨多个模型进行查询?
- c++ - 我的程序无法正常工作,我的函数不断抛出分段错误
- python - Python从链接读取计时器值
- android - Google 重置密钥证书后,Firebase Google 登录不起作用
- r - spatstat 拟合混合模型中估计的置信区间
- laravel - 找不到 Laravel 类控制器,因为路由非常区分大小写