我试图创建Postgres查询,以返回不同间隔(过go 7天、上个月、过go 6个月等)市场wine 吧的开盘和收盘价.在简单的查询中做这件事似乎很容易,但并不像我想象的那样容易(或者我不知道怎么做).

为了简单起见,我在dbfiddle中创建了两个示例,稍后我将对它们进行解释:

https://dbfiddle.uk/4iPeLzM6:插入了几个条形图,并在查询中创建了两个间隔,一个从‘2023-03-12’开始,另一个从‘2023-03-15’开始.使用BAR_INTERVIES和RESULT连接条形图似乎是合乎逻辑的,P1具有所有条形图,而P2具有从‘2023-03-15’开始的条形图

https://dbfiddle.uk/NyoIG1JC:已try 获取P1和P2间隔的开盘价和收盘价,我预计结果如下:

range|open |close 
P1   | 10.2| 11.2
P2   | 11.7| 11.2

我假设窗口函数没有像我认为的那样工作,但如果有人能解释一下原因会很有帮助.特别是,这是令人困惑的,因为在第一小提琴的结果是我所期望的.

推荐答案

窗口函数有点复杂,但您要搜索的是

问题在于窗口,正如第一个窗口函数设置的那样,相同的行应用于第二列,因为它具有相同的窗口,因此您需要定义第二个窗口来获取您想要的值

with bar_intervals as (select 'P1' as range, '2023-03-12'::timestamp as start_date UNION select 'P2', '2023-03-15') 
  select distinct on (range) 
  range, first_value(open) over (PARTITION BY range order by datetime),
  first_value(close) OVER (PARTITION BY range order by datetime DESC ) 
  from bar_intervals join bars on  datetime >= start_date
range first_value first_value
P1 10.2 11.2
P2 11.7 11.2

fiddle

Sql相关问答推荐

在SQL Server中使用LEFT连接包含特定记录

如何并行SELECT和RESET?

SQL Google Sheets:UNIQUE/DISTINCT和编码查询函数

SUM(条件)在Oracle?

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

如何退回当年的所有参赛作品?""

使用SQL旋转表的列(Snowflake)

SQL:如何查找聚合满足条件的连续日期

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

正在编写查询.我需要将订阅的时间段分为第一个订阅中包含的另一个订阅之前和之后的时间段

在Netezza SQL中将字符DataType转换为整型DataType

显示十进制列,但尽可能显示为整数

每个分组最多 Select 最后 2 个值并并排显示它们

Postgresql - 如何根据阈值计算累积和

如何在 JSONB 数组的每个对象中添加新的键值对- PostgreSQL

在Snowflake中,如何将以逗号和连字符分隔的多个混合数值拆分成数字列表

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

如何在 SQL Server 中将 -13422.8450 舍入到 -13422.84

Oracle SQL 从多个条件中 Select 但具有相同的 id

如果 SQL 中不存在数据,如何根据某个 ID 为所有日期添加前一行