首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接当前行和上一行之间的范围

连接当前行和上一行之间的范围
EN

Stack Overflow用户
提问于 2021-02-08 13:02:16
回答 2查看 150关注 0票数 3

有人能帮帮我吗?我有两张桌子:价格和间隔:

代码语言:javascript
复制
   Prices:           Intervals:
   Price         Interval_bound  Category
    16                 5         cheap
    11                 10        cheap
    9                  15        median
    26                 20        median
    6                  25        expensive

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

代码语言:javascript
复制
Price  Category
 16      median
 11      cheap
 9       cheap
 26      expensive
 6       cheap

我试着用

代码语言:javascript
复制
select Price, Category from Prices 
left join Intervals on Prices.Price interpolate previous value Interval.Interval_bound

但它只给了我一个空的类别。我怎么做才是最简单的方法?我在用Vertica。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-08 13:06:23

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

代码语言:javascript
复制
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);
票数 3
EN

Stack Overflow用户

发布于 2021-02-08 15:21:47

我很困惑-为什么你的版本不起作用?

代码语言:javascript
复制
-- your input ..
WITH
prices(price) AS (
          SELECT 16
UNION ALL SELECT 11
UNION ALL SELECT  9
UNION ALL SELECT 26
UNION ALL SELECT  6
)
, 
-- your other input 
intervals(interval_bound,category) AS (
          SELECT  5,'cheap'
UNION ALL SELECT 10,'cheap'
UNION ALL SELECT 15,'median'
UNION ALL SELECT 20,'median'
UNION ALL SELECT 25,'expensive'
)
-- the way I would write it ...
SELECT
  p.price
, i.category
FROM prices p
LEFT JOIN intervals i
ON p.price INTERPOLATE PREVIOUS VALUE i.interval_bound
;
 price | category
-------+-----------
     6 | cheap
     9 | cheap
    11 | cheap
    16 | median
    26 | expensive

-- the way you wrote it ...
select Price, Category from Prices
left join Intervals on Prices.Price interpolate previous value Intervals.Interval_bound;
 Price | Category
-------+-----------
     6 | cheap
     9 | cheap
    11 | cheap
    16 | median
    26 | expensive

你的案子出了什么问题?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66102193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档