sql - JOIN 当前行和上一行之间的范围

标签 sql vertica

有人可以帮帮我吗?我有两个表:价格和间隔:

   Prices:           Intervals:
   Price         Interval_bound  Category
    16                 5         cheap
    11                 10        cheap
    9                  15        median
    26                 20        median
    6                  25        expensive

我需要根据区间将类别值加入价格,其中 Interval_bound 是类别的最低边界:

Price  Category
 16      median
 11      cheap
 9       cheap
 26      expensive
 6       cheap

我试过用

select Price, Category from Prices 
left join Intervals on Prices.Price interpolate previous value Interval.Interval_bound

但它只为类别提供了 NULL。我怎样才能以最简单的方式做到这一点?我正在使用 Vertica。

最佳答案

您可以使用lead() 获取下一个上限然后join:

select p.Price, i.Category
from Prices p left join
     (select i.*,
             lead(interval_bound) over (order by interval_bound) as next_interval_bound
      from Intervals i
     ) i
     on p.price >= i.interval_bound and
        (p.price < i.next_interval_bound or i.next_interval_bound is null);

关于sql - JOIN 当前行和上一行之间的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66102193/

相关文章:

sql - 我怎样才能得到一个表中所有列的计数(*)?使用 PostgreSQL

java - 如何使用 JDBC 高效导出/导入数据库数据

database - 每行和/或列的字节数

sql - VERTICA 在一个带有命名列的语句中插入多行

sql - "Create table if not exists"- 如何检查架构?

mysql - SQL 中的变量/For Each

hadoop - 提高从 hdfs 导出 sqoop 的效率

mysql - 基于日期的sql聚合

用于更新列表计数的 MySQL 查询

mysql - 如何按查询显示 mySQL 组中计数为零的行?