首页 > 解决方案 > 如何使用每个客户的最新状态更新提取数据

问题描述

我正在尝试构建一个查询,该查询只会检索每个客户的最新状态更新。

我附上了一张关于当前如何构建数据以及我希望如何返回它的图像。

在此处输入图像描述

标签: sqlsql-serversubquery

解决方案


您没有指定您正在使用的数据库。如果它实现了元组相等,你可以这样做:

select *
from t
where (customer, status_time) in (
  select customer, max(status_time) from t group by customer
)

在 PostgreSQL 中,您可以使用惊人的DISTINCT ON. 最坏的情况,您需要使用相关子查询;它速度较慢,但​​可以完成这项工作。

为 SQL Server 编辑

在 SQL Server 中,您可以使用 CTE 预先计算最大状态时间。例如,您可以这样做:

with
a as (
  select customer, max(status_time) as max_time
  from t 
  group by customer
)
select
from t
join a on a.customer = t.customer 
      and a.max_time = t.status_time

  

推荐阅读