You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询每种ENTRY_TYPE_NAME的最新Timestamp完整备份记录?

问题描述

现有如下结构的备份表数据(来自SYS.M_BACKUP_CATALOG):

'ENTRY_TYPE_NAME, STATE_NAME, TIMESTAMP',
'"log backup", "successful", "2022-07-25 12:11:20.965000000"',
'"complete data backup", "successful", "2022-07-22 11:39:56.757000000"',
'"complete data backup", "canceled", "2021-05-06 06:08:22.391000000"',
'"log backup", "failed", "2022-07-06 16:22:45.346000000"',
'"complete data backup", "failed", "2022-07-05 06:16:47.702000000"',

需要按ENTRY_TYPE_NAME分组,获取每组中Timestamp最新的完整记录(包含ENTRY_TYPE_NAME、STATE_NAME、Timestamp三个字段),期望输出:

'ENTRY_TYPE_NAME, STATE_NAME, TIMESTAMP',
'"complete data backup", "Successful", "2022-07-22 11:39:56.757000000"',
'"log backup", "Successful", "2022-07-25 12:11:20.965000000"',

原查询只能拿到分组后的类型和最大时间,无法关联对应的STATE_NAME:

select ENTRY_TYPE_NAME, MAX(UTC_END_TIME) as Timestamp from SYS.M_BACKUP_CATALOG GROUP BY ENTRY_TYPE_NAME

解决方法1:用窗口函数ROW_NUMBER()

这是最直接的方案,通过窗口函数给每组内的记录按时间倒序排名,取排名第一的记录:

SELECT ENTRY_TYPE_NAME, STATE_NAME, UTC_END_TIME AS TIMESTAMP
FROM (
    SELECT 
        ENTRY_TYPE_NAME, 
        STATE_NAME, 
        UTC_END_TIME,
        ROW_NUMBER() OVER (PARTITION BY ENTRY_TYPE_NAME ORDER BY UTC_END_TIME DESC) AS rn
    FROM SYS.M_BACKUP_CATALOG
) t
WHERE rn = 1;
  • 逻辑:PARTITION BY ENTRY_TYPE_NAME按备份类型分组,ORDER BY UTC_END_TIME DESC让每组内最新时间的记录排第1,外层筛选rn=1就能拿到目标完整记录。

解决方法2:用关联子查询

先通过子查询拿到每组的最大时间,再关联原表获取对应状态:

SELECT 
    b.ENTRY_TYPE_NAME, 
    b.STATE_NAME, 
    b.UTC_END_TIME AS TIMESTAMP
FROM SYS.M_BACKUP_CATALOG b
INNER JOIN (
    SELECT ENTRY_TYPE_NAME, MAX(UTC_END_TIME) AS max_time
    FROM SYS.M_BACKUP_CATALOG
    GROUP BY ENTRY_TYPE_NAME
) t ON b.ENTRY_TYPE_NAME = t.ENTRY_TYPE_NAME AND b.UTC_END_TIME = t.max_time;
  • 逻辑:子查询先得到每个备份类型的最新时间,再通过类型和时间关联原表,匹配出对应的状态字段。

内容的提问来源于stack exchange,提问作者Abhinav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:27:30