【问题标题】:Displaying one instance of each category SQL Query显示每个类别 SQL Query 的一个实例
【发布时间】:2022-07-25 21:10:38
【问题描述】:
'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 的最新(根据时间戳)值。

例如,我想要的输出是,

'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"',

我尝试使用此查询,select ENTRY_TYPE_NAME, MAX(UTC_END_TIME) as Timestamp from SYS.M_BACKUP_CATALOG GROUP BY ENTRY_TYPE_NAME,但由于完整的数据备份有 3 个状态名称,而日志备份只有 2 个,我无法获得所需的输出。

有没有其他方法可以解决这个问题?

【问题讨论】:

  • 您使用的是什么 DBMS?请始终使用您的 DBMS 标记您的 SQL 请求。

标签: sql


【解决方案1】:

这可以使用 PARTITION BY 来实现。示例:

WITH tempdata as
{
    SELECT ROW_NUMBER() OVER(PARTITION BY ENTRY_TYPE_NAME
    ORDER BY TIMESTAMP DESC) as RowNumber,
    ENTRY_TYPE_NAME,
    STATE_NAME,
    TIMESTAMP
    FROM #temptable1
)
SELECT ENTRY_TYPE_NAME,STATE_NAME,TIMESTAMP FROM tempdata WHERE RowNumber = 1

#temptable1 是您的表名。

Here you can see example result set

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多