gpt4 book ai didi

sql - 获取有效的日期范围。最小值和最大值

转载 作者:行者123 更新时间:2023-11-29 11:44:09 24 4
gpt4 key购买 nike

我需要按有效范围获取表格的值。目前,我按表格的列分组,并对年份进行了最小值和最大值;但这给了我这个例子的错误结果。我需要用语句 sql 或 pentaho 来解决它

示例数据:

year validity   Value1  Value2
2004 A B
2006 A C
2007 A B
2008 A B

SQL:

SELECT
min(anio), max(anio), value1, value2
FROM tabla
GROUP BY
value1, value2

错误结果:

year min    year max    Value1  Value2
2004 2008 A B
2006 2006 A C

预期结果:

year min    year max    Value1  Value2
2004 2004 A B
2007 2008 A B
2006 2006 A C

请帮助解决这个问题。

最佳答案

您可以组合使用 LAG()SUM() 窗口函数,根据您的逻辑将行分组。一旦分离,计算最小值和最大值就很简单了。

例如:

select
min(year_validity) as year_min,
max(year_validity) as year_max,
min(value1) as value1,
min(value2) as value2
from (
select
*,
sum(init) over(order by year_validity) as grp
from (
select *,
case when not ( (value1, value2) = (
lag(value1) over(order by year_validity),
lag(value2) over(order by year_validity)
) ) then 1 else 0 end as init
from tabla
) x
) y
group by grp
order by value1, value2

结果:

year_min  year_max  value1  value2
-------- -------- ------ ------
2004 2004 A B
2007 2008 A B
2006 2006 A C

为了记录,这个案例的数据脚本是:

create table tabla (
year_validity int,
value1 varchar(10),
value2 varchar(10)
);

insert into tabla (year_validity, value1, value2) values (2004, 'A', 'B');
insert into tabla (year_validity, value1, value2) values (2006, 'A', 'C');
insert into tabla (year_validity, value1, value2) values (2007, 'A', 'B');
insert into tabla (year_validity, value1, value2) values (2008, 'A', 'B');

关于sql - 获取有效的日期范围。最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56859273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com