【问题标题】:Finding the most recent timestamp per event查找每个事件的最新时间戳
【发布时间】:2014-03-02 07:43:55
【问题描述】:

我的表格有以下列,|id|incident_number|created_at|note|

所以每个事件可以有很多更新,更新按 ID 分类,并以2014-01-30 21:11:56 的形式给出created_at 时间。因此,一个incident_number 可以有多个 id 和多个 created_at,具体取决于它的更新频率。

我想要做的是过滤掉所有其他 created_at 的最新一个对应的时间。

问题是,在运行查询时,我无法查看数据并说出 created_at 是否小于此给定日期,因为我不确定这些事件何时处理完毕。

大图是我将能够显示最近更新的每个事件,created_at 日期排序

有什么建议吗?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    我在你的问题中途有点迷茫,但这可能会给你一个想法:

    SELECT MAX(created_at) FROM ... GROUP BY incident_number
    

    编辑:我添加这个是因为你的 cmets。

    是的,MAX 只返回最大值。我的声明是为了帮助您找到该值并添加您认为合适的其他值。我猜你需要的是这样的:

    SELECT MAX(created_at), incident_number, note FROM ... GROUP BY incident_number, note
    

    对于每个事件,仅显示具有最近 created_at 时间戳的行。

    EDIT2:正如你提到的一个错误,我检查了我的 SQL。 GROUP BY 子句中缺少列 note。我没有看到子选择的必要性。

    【讨论】:

    • 可行,但它不会让我显示其他列,它只显示 MAX(created_at)
    • 我也试过按MAX(created_at)排序,不行,报错。
    • @user2908778 好的,我知道您需要进一步的提示。我更新了答案。
    • 哈哈,不,那是我尝试的第一件事。它返回一个错误。
    • @user2908778 我又更新了。您必须将要选择的所有列添加到 GROUP BY 子句中,除了您正在使用聚合的列(如 MAX、SUM、...)。我在上面的示例中忘记了note
    【解决方案2】:

    好的,所以我最终要做的是为 created_at 列创建一个子查询。最终查询看起来像这样......

    SELECT Top 1
        wn.id, wn.incident_number, wn.created_at, note 
    FROM
        sn_incident_work_note wn
    Where
        wn.incident_number = 'INC0005607474' 
    
    and wn.created_at = (Select MAX(iwn.created_at)
                        from sn_incident_work_note iwn
                        where iwn.incident_number = wn.incident_number)
    
    Order By id DESC
    

    【讨论】:

      猜你喜欢
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 2021-05-16
      相关资源
      最近更新 更多