我正在try 获取用于查询的行..其中,对于每组id,最小结束日期中的行值1、值2等于最大结束日期.

我当前的查询仅从查询结果中的max end_date获取行value1、value2:

select a.id, a.end_date, a.value1, a.value2
from table1 as a
inner join (
    select id, max(end_date) as end_date
    from database1
    group by id
) as b 
on a.id = b.id and a.end_date = b.end_date
order by id, end_date

这个结果获得了最新的记录,但我希望获得value1&值2,最小值(结束日期=最大值(结束日期),按id分组.

下面是一个示例查询,详细说明了我想要获得的信息:

id end_date value1 value2
AAPL 02/12/22 2 1
AAPL 02/13/22 2 1
AAPL 02/14/22 3 2
AAPL 02/15/22 3 2
MSFT 03/01/22 2 5
MSFT 03/02/22 4 5
MSFT 03/03/22 4 5
MSFT 03/04/22 4 5

从前面的查询中,我需要获得以下查询:

id end_date value1 value2
AAPL 02/14/22 3 2
MSFT 03/02/22 4 5

所以再一次,我需要一行,其中value1,value2的最小值(end_date)=最大值(end_date),按id分组.

推荐答案

你可以用row_number()来做

select id, end_date, value1, value2
from (
   select t1.*, row_number() over(partition by t1.id order by t1.end_date) rn
   from tbl t1
   join (
     select id, end_date, value1, value2
     from (
       select t.*, row_number() over(partition by id order by end_date desc) rn
       from tbl t
     ) t
     where rn = 1
   ) t2 on t1.id = t2.id and t1.value1 = t2.value1 and t1.value2 = t2.value2 
) t
where rn = 1

db<>fiddle

Sql相关问答推荐

前面的语句不喜欢AND LIKE?当try 更新使用ID和日期过滤的表时

如果元素包含通过SQL指定的字符串,则过滤掉数组元素

在Oracle SQL中将列值转换为行

snowflake/SQL嵌套的JSON对象和数组

Select 非重复值并按条件排除行

在xml.Modify方法中使用子字符串和可能的替代方法

将时间范围划分为全天和前后剩余小时

从重复值中获取最新值

Postgresql - WHERE 中的 MAX 标准 - 初学者问题

SQL 中的第一个值和倒数第二个值

如何根据 SQL Server 中 1 条语句中 SELECT 的结果进行 INSERT 或 UPDATE

如何在 case 语句中使用聚合?

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

如何创建一个递归计数器来查找一个元素有多少父级和子级?

多行状态下的分组查询判断状态

Snowflake中的动态SQL优化

try 将多行折叠为单个结果

如何按日期和位置对最近 3 个报告日期的 SQL 查询结果进行透视?

忽略与给定列匹配的行的 LAG 函数

如果当前日期是一周中的某一天,则从另一天提取结果