我有下表.

ID Desc progress updated_time
1 abcd planned 2022-04-20 10:00AM
1 abcd planned 2022-04-25 12:00AM
1 abcd in progress 2022-04-26 4:00PM
1 abcd in progress 2022-05-04 11:00AM
1 abcd in progress 2022-05-06 12:00PM

我只想返回一行,该行具有最新的updated\u时间,无论它的进度如何,

ID Desc progress updated_time
1 abcd in progress 2022-05-06 12:00PM

我知道如果我按"进度"分组(如下所示),我也会得到一个我不需要的计划进度.我只需要 for each ID指定一行及其最新更新时间.

我写了以下查询,

select ID,desc,progress,updated_time 
from t1 
where updated_time IN (select ID, desc, progress, max(updated_time) 
from t1 group by 1,2,3)

我也得到以下错误,

推荐答案

在子查询中 Select 多个值将不起作用,您需要使用scalar subquery Select 单个值:

-- sample data
WITH dataset (ID, Desc, progress, updated_time) AS (
    VALUES 
(1, 'abcd', 'planned',  timestamp '2022-04-20 10:00'),
(1, 'abcd', 'planned',  timestamp '2022-04-25 12:00'),
(1, 'abcd', 'in progress',  timestamp '2022-04-26 16:00'),
(1, 'abcd', 'in progress',  timestamp '2022-05-04 11:00'),
(1, 'abcd', 'in progress',  timestamp '2022-05-06 12:00'),
(1, 'abcd', 'in progress',  timestamp '2022-05-07 12:00'),
(2, 'abcd', 'in progress',  timestamp '2022-05-04 11:00'),
(2, 'abcd', 'in progress',  timestamp '2022-05-06 12:00')
) 

--query
select  id, Desc, progress, updated_time
from dataset o
where updated_time = (select max(updated_time) from dataset i where i.id = o.id)

或具有max窗口功能和子 Select 的类似方法:

--query
select  id, Desc, progress, updated_time
from (
    select *,  max(updated_time) over (partition by id) max_time
    from dataset
)
where max_time = updated_time

或仅使用row_number:

select  id, Desc, progress, updated_time
from 
(
    select *,  
        row_number() over(partition by id order by updated_time desc) rank
    from dataset
)
where rank  = 1

输出:

id Desc progress updated_time
1 abcd in progress 2022-05-07 12:00:00.000
2 abcd in progress 2022-05-06 12:00:00.000

Sql相关问答推荐

如何在Snowflake SQL存储过程中传递LIMIT和OFFSET的参数?

使用来自不同深度的嵌套组的值执行计算的干净方法?

为什么在postgres中,横向连接比相关子查询快?

如何在PostgreSQL中对第1,1,1,1,2,2,2,2行进行编号

如何根据同一表中某一列中的值重新排列行(仅输出它们)(重新排序)?

BigQuery-当子查询不返回任何结果时,所有结果为零

如何计算给定日期前三个月的值以及月初数据?

数据库SQL-CTE命名空间(错误?)使用临时视图

SQL到Snowflake-转换嵌套的SELECT(值

如何简化此PostgreSQL查询以计算平均值?

将 jsonb 数组中的对象取消嵌套到单独的行中

YEAR 函数仍然不可SARGable 吗?

在 Oracle 21c 中透视文本值

Oracle SQL:通过将日期与另一个表行进行比较来 Select 值

PostgreSQL中如何提取以特定字符开头的字符串中的所有单词?

如何将特定值从 JSON 列中的一个字段移动到 PostgreSQL 中的另一个字段?

如何筛选 GROUP BY 结果? HAVING 没有产生预期的结果

As400 (IBM i) SQL 表 QSYS2.SYSTABLES 上的元数据

条件前置值

并非所有变量都绑定在 PL SQL 函数中