Выберите продолжить повторять вхождения в течение периода времени <х дней - PullRequest
0 голосов
/ 25 января 2019

У меня есть следующие данные.

KEY     |ERRRTYPE       |CREATEDATE |ERROR  
101aa   |Not on Target  |1/2/2019   |Y
111bw   |Not on Target  |1/2/2019   |Y
123ds   |Not on Target  |1/2/2019   |Y
101aa   |Not on Target  |1/3/2019   |Y
121kd   |Not on Target  |1/3/2019   |Y
111bw   |Not on Target  |1/3/2019   |Y
132ee   |Not on Target  |1/4/2019   |Y
123ww   |Not on Target  |1/4/2019   |Y
111bw   |Not on Target  |1/4/2019   |Y
123kk   |Not on Target  |1/4/2019   |Y
111bw   |Not on Target  |1/5/2019   |Y
101aa   |Not on Target  |1/5/2019   |Y
234ew   |Not on Target  |1/5/2019   |Y
111bw   |Not on Target  |1/6/2019   |Y
101aa   |Not on Target  |1/6/2019   |Y
124dd   |Not on Target  |1/6/2019   |Y

Мне нужно найти данные текущей или последней записи даты, а также, если поле KEY, последовательно повторяющееся в течение последних 5 дней или менее, необходимо вернуть Y в новом столбце,

после данных должно выглядеть следующим образом:

KEY     |ERRRTYPE       |CREATEDATE     |ERROR  |Consecutive 
111bw   |Not on Target  |1/6/2019       |Y      | Y           
101aa   |Not on Target  |1/6/2019       |Y      | Y
124dd   |Not on Target  |1/6/2019       |Y      | N

Поскольку KEYs = 111bw повторяется 5 раз подряд каждый день, а KEY 101aa повторяется 2 раза подряд, в поле «Последовательная ошибка» должно быть Y, иначе N

Ответы [ 2 ]

0 голосов
/ 25 января 2019

какая частота каждого ключа в день?может ли кнопка повторять количество раз в день или может происходить один раз в день

0 голосов
/ 25 января 2019

следующее решение подготовлено на SQL Server Я не уверен, что он успешно работает на MySQL Поскольку все функции являются стандартными SQL, такими как dens_rank , CTE и т. Д., Я надеюсь, что есть способ преобразовать следующий код в коды MySQL или он работает как

;with cte as (
    select
    *, dense_rank() over (order by createdate desc) rn
    from ErrorData
)
select
    [KEY], ERRRTYPE, CREATEDATE, ERROR,
case when t.cnt = 5 then 'Y' else 'N' end as Consecutive 
from cte
cross apply (
    select
    count(*) as cnt
    from ErrorData e
    where e.[KEY] = cte.[KEY]
    and e.createdate >= dateadd(dd, -5, cte.createdate)
) as t
where rn = 1

enter image description here

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