首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle:有效地获取每个id的最近日期

Oracle:有效地获取每个id的最近日期
EN

Stack Overflow用户
提问于 2011-08-24 21:05:12
回答 3查看 2.4K关注 0票数 2

我正在尝试创建一个查询,该查询返回表price中表date中每个日期的每个id的最接近(以上)价格。

date中有以下日期:

代码语言:javascript
复制
date
2010-11-25
2010-11-24
2010-11-10

price如下:

代码语言:javascript
复制
id  date        price
A   2010-11-26  24.99
A   2010-11-24  27.99
A   2010-11-13  22.12
B   2010-11-26  26.51
B   2010-11-24  23.24
B   2010-11-22  27.95

所以对于2010-11-25我应该

代码语言:javascript
复制
id  date        price
A   2010-11-26  24.99
B   2010-11-26  26.51

对于2010-11-10

代码语言:javascript
复制
id  date        price
A   2010-11-13  22.12
B   2010-11-22  27.95

对于2010-11-24

代码语言:javascript
复制
id  date        price
A   2010-11-24  27.99
B   2010-11-24  23.24

等。

我相信为给定的日期获得结果是可行的(可能是组by...having),但是我正在寻找一个解决方案,为所有的日期做到这一点。

编辑:

这个例子中有一个错误,改正了.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-24 21:13:18

我想你是认真的,但你的例子可能有错误。(或误解)。

代码语言:javascript
复制
select
  id, date,price
from
  (select
    p.id,
    p.date,
    p.price,
    dense_rank() over (partition by d.date, p.id order by p.date) as rank
  from
    date d
    inner join price p on p.date > d.date)
where
  rank = 1
票数 2
EN

Stack Overflow用户

发布于 2011-08-24 21:44:01

代码语言:javascript
复制
SELECT
    d.date AS searchDate
    p.id
    p.date
    p.price
FROM 
    date d
  ,                              --- this is a CROSS JOIN
    ( SELECT DISTINCT id
      FROM price
    ) product
  JOIN
    price p
      ON  p.id = product.id
      AND p.date =
          ( SELECT MIN(p2.date)
            FROM price AS p2
            WHERE p2.date >= d.date
          )
票数 0
EN

Stack Overflow用户

发布于 2011-08-24 21:52:26

这应该对你有用,我想:

代码语言:javascript
复制
select x.date_1 as candidate_date ,
       t.*
from ( select d."date"        as date_1  ,
              p.id ,
              min( p."date" ) as date_2
        from      "date" d
        left join price  p on p."date" >= d."date"
        group by p.id     ,
                 d."date"
     ) x
left join price t on t.id     = x.id
                 and t."date" = x.date_2
order by 1,2,3

from子句中的虚拟表应为价格表中的每个"id“提供1行,其日期大于或等于日期表中的候选日期。

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

https://stackoverflow.com/questions/7182254

复制
相关文章

相似问题

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