【问题标题】:Select continue repeat occurrences within time period <x days选择在 <x 天的时间段内继续重复发生
【发布时间】:2019-01-25 05:02:18
【问题描述】:

我有以下数据。

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

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    在 SQL Server 上准备了以下解决方案 我不确定它是否在 MySQL 上成功运行 由于所有函数都是标准 SQL,如dense_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
    

    【讨论】:

    • 你好 Eralper,这可行,但我犯了一个错误。由于 101aa 在 2019 年 1 月 6 日和 2019 年 1 月 5 日连续出现,因此 101aa 也应该有“Y”表示连续错误
    • 对于连续财产,我认为连续5天很重要。所以5天不是必须的,据我所知。是当天还是前几天(至少一天)?
    【解决方案2】:

    一天中每个键的频率是多少?键可以在一天中重复多少次,或者它可能一天出现一次

    【讨论】:

    • 一天不重复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多