Context

我有一张桌子:

Time Metric A Metric B Value
A A A 1
A A B 2
A A C 1
B A A 1
B A B 2
B A C 1

我想要得到最后一个,并按指标A总结表格,但有时时间会变得疯狂,按时间分组不是一个选项.

我想要的是获得每个指标A的指标B的最后一个值.有什么关于如何确保我获得指标A的指标B的最后插入值的提示吗?

Desired output

Time Metric A Metric B Value
A A A 1
A A B 2
A A C 1

推荐答案

您可以使用RANK()或Dense_RANK()来实现您想要的结果.

create table table1 (
  time timestamp, 
  metric_a varchar(1), 
  metric_b varchar(1), 
  value integer
  );
  
insert into table1 values 
(current_timestamp, 'A','A',1),
(current_timestamp, 'A','B',2),
(current_timestamp, 'A','C',1),
(current_timestamp - interval '10 minutes', 'A','A',1), 
(current_timestamp - interval '10 minutes', 'A','B',2), 
(current_timestamp - interval '10 minutes', 'A','C',1), 
(current_timestamp, 'B','A',2),
(current_timestamp, 'B','B',3),
(current_timestamp, 'B','C',4),
(current_timestamp - interval '10 minutes', 'B','A',2), 
(current_timestamp - interval '10 minutes', 'B','B',3), 
(current_timestamp - interval '10 minutes', 'B','C',4);

select time, metric_a, metric_b, value 
from (
  select *, 
   dense_rank() over (partition by metric_a, metric_b order by time desc) as rnk
  from table1
  )z
where rnk = 1;
time metric_a metric_b value
2023-08-14T15:13:49.623Z A A 1
2023-08-14T15:13:49.623Z A B 2
2023-08-14T15:13:49.623Z A C 1
2023-08-14T15:13:49.623Z B A 2
2023-08-14T15:13:49.623Z B B 3
2023-08-14T15:13:49.623Z B C 4

View on DB Fiddle

Sql相关问答推荐

SQL:创建查询以添加减少的总数

如何在PostgreSQL中同时为id s列表执行多个update语句?'

用相同值更新行

如何根据计数和分组获取订单总数

在Oracle中,如何删除具有特定值的行,仅当它是重复的行?

如何查找所提供日期范围的所有季度开始日期和结束日期

按日期时间(不包括秒)连接表

如何将`now()`作为SQL插入语句的一部分?

Oracle 23c ROUND,数据类型为DATE

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

PostgreSQL:查找继承表中的特定记录属于哪个表

WooCommerce产品的SQL查询:获取sku和产品标签

如何将insert语句重复n次使一个值递增?

需要使用SQLite查询进行一些奇怪的时间转换

如何在 golang squirrel lib 中添加 postgreSQL 的distinct on

获取主表条目,其中最新的辅助条目是 6 个月前

具有多个表 JOINS 的 STRING_AGG 的替代方法 (SQL Server 2016)

在自引用表中使用分组和计数的SQL查询语句

Postgres如何在一个日历周中前进和回填值

PostgreSQL 中的递归树查询