gpt4 book ai didi

sql - Postgres中负数之前的第一个正数的行?

转载 作者:行者123 更新时间:2023-11-29 13:07:55 25 4
gpt4 key购买 nike

我有一个像这样的表:

enter image description here

我正在做一些计算,有时当我在第 2 列中得到一个负数时,我必须找到这个负数之前的第一个正数。例如,如果负数是 -2.2,我想访问 1.2,如果它是 -0.8,那么我想访问 1.5。

我该怎么做?

谢谢。

最佳答案

您可以使用窗口函数的组合来执行此操作。首先,将计数用作窗口函数,仅在 column2>0 时递增计数。这会将您的行分成您需要选择正值的组。然后我们可以使用 first_value 从分区中获取第一行,这将是正值:

create table test (column1 int, column2 numeric, column3 date);
insert into test VALUES (30, 2.5, '2019-01-01'), (31, 1.5, '2019-01-02'), (28, -0.8, '2019-01-03'), (29, 1.0, '2019-01-04'), (30, 1.2, '2019-01-05'), (38, -2.1, '2019-01-06'), (37, -2.2, '2019-01-07');


SELECT column1,
column2,
first_value(column2) OVER (PARTITION BY col2_group ORDER BY column3)
FROM (
select column1,
column2,
-- Create groups of rows
count(column2) FILTER (WHERE column2>0) OVER(ORDER BY column3) as col2_group,
column3
FROM test) as sub
ORDER BY column3
;
column1 | column2 | first_value
---------+---------+-------------
30 | 2.5 | 2.5
31 | 1.5 | 1.5
28 | -0.8 | 1.5
29 | 1.0 | 1.0
30 | 1.2 | 1.2
38 | -2.1 | 1.2
37 | -2.2 | 1.2
(7 rows)

将来,如果您将数据和预期输出分别添加为文本而不是图像,将会非常有帮助。

关于sql - Postgres中负数之前的第一个正数的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58801601/

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