Запрошенный совет по SQL-запросу - PullRequest
0 голосов
/ 26 апреля 2019

Мне нужно взять существующий запрос, с которым я получил помощь, и расширить его.Запрос:

,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

enter image description here

1 Ответ

0 голосов
/ 29 апреля 2019

Я потратил некоторое время на некоторые дополнительные исследования этой проблемы.Одна из моих проблем заключается в том, что я не тренировался по этому вопросу, и в результате терминология является для меня серьезной слабостью.

То, что я пытался сделать, это объединить запросы вниз, чтобы я мог уменьшить количество наборов данных.Решение моей проблемы заключается в следующем:

SELECT DISTINCT

(SELECT COUNT (DISTINCT EventId) ИЗ транзакции WHERE EventDate между DATEADD (YEAR, DATEDIFF (YEAR, 0, DATEADD (YEAR, -)1, @STARTDATE)), 0) И DATEADD (Год, -1, @ STARTDATE) И Регион IN (@Region)) A,

(ВЫБЕРИТЕ COUNT (DISTINCT EventId) ИЗ транзакции WHERE EventDate между DATEADD (ГОД, DATEDIFF (ГОД, 0, DATEADD (ГОД, -0, @STARTDATE)), 0) И DATEADD (Год, -0, @ STARTDATE) И Регион IN (@Region)) B

ОТ транзакции

Это не содержит все необходимые мне подзапросы, но должно показать вам, куда я направлялся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...