Определите столбцы с одинаковым идентификатором

Я хочу создать новый столбец, в данном случае «Повторить», который помечает «ДА» для строк, которые имеют один и тот же ключ (Клэйв) и имеют менее 7 дней между resolutiondate и createddate, а столбец Massive должен быть «НЕТ». ". Вот пример того, что я хочу получить.

Определите столбцы с одинаковым идентификатором

Я хочу попробовать использовать формулу lead and lag для сортировки дат от самой низкой до самой высокой, но не знаю, как применить ее в SQL. Я не совсем уверен, можно ли получить этот столбец.

Любая помощь очень ценится. Большое спасибо

Редактировать.

Я использовал формулу, которую вы предлагаете, и она работает! , Еще раз спасибо всем за помощь :)

SELECT top 100
CF1.STRINGVALUE AS 'ID OT',
jis.created, 
jis.resolutiondate,
IIF(CF3.STRINGVALUE like 'IDR-%','SI','NO') AS 'Massive',
cfo8.customvalue AS 'Solved',
CASE WHEN jis.resolutiondate IS NULL 
     THEN 'NO'
     WHEN LAG(resolutiondate) OVER (PARTITION BY 'ID OT' ORDER BY resolutiondate) >  DATEADD(DAY, -7, resolutiondate)
     AND LAG(CF3.STRINGVALUE) OVER (PARTITION BY 'ID OT' ORDER BY resolutiondate) = 'NO'
     AND LAG(cfo8.customvalue) OVER (PARTITION BY 'ID OT' ORDER BY resolutiondate) = 'NO'
     THEN 'NO'
     ELSE 'YES'
END AS SLA

FROM [DWH].[JIR].[jiraissue] jis
LEFT JOIN [DWH].[JIR].[customfieldvalue] CF1 ON (CF1.issue = jis.id AND CF1.CUSTOMFIELD = 10004)
LEFT JOIN [DWH].[JIR].[customfieldvalue] CF3 ON (CF3.issue = jis.id AND CF3.CUSTOMFIELD = 10032)
LEFT JOIN [DWH].[JIR].[customfieldvalue] CF14 ON (CF14.issue = jis.id AND CF14.CUSTOMFIELD = 10906)
LEFT JOIN [DWH].[JIR].customfieldoption cfo8 ON (CF14.customfield = cfo8.customfield AND CF14.stringvalue=CAST(cfo8.id AS CHAR))
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
184
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если я правильно вас понимаю, вы можете использовать оконные функции:

select t.*,
    case 
        when lag(resolutiondate) over(partition by key order by resolutiondate) > dateadd(day, -7, resolutiondate)
            and lag(massive) over(partition by key order by resolutiondate) = 'NO'
        then 'SI'
        else 'NO'
    end as sla
from mytable t

Это сравнивает дату в текущей строке с датой в предыдущей строке и проверяет статус massive в предыдущей строке.

Возможно, вы хотите проверить статус текущей строки, а не предыдущей — это немного проще:

select t.*,
    case 
        when lag(resolutiondate) over(partition by key order by resolutiondate) > dateadd(day, -7, resolutiondate)
            and massive = 'NO'
        then 'SI'
        else 'NO'
    end as sla
from mytable t
Ответ принят как подходящий

Я думаю, что это логика, которую вы хотите:

select t.*,
       (case when massive = 'SI' then 'NO'
             when lag(resolutiondate) over (partition by key) < 
                  dateadd(-7, day, creationdate
             then 'No'
             else 'Si'
        end) as SLA
from t;

То, как это написано, не кажется необходимым оценивать ключевой столбец. Даты разрешения одинаковы для каждого ключа. Что-то вроде этого

select t.*,
       case when t.massive='No' and dt.diff<7
            then 'Si'
            else 'No' end SLA
from tTable t
     cross apply (values (datediff(day, created, resolutiondate))) dt(diff);

Другие вопросы по теме