我正在尝试创建一个查询,该查询返回表price中表date中每个日期的每个id的最接近(以上)价格。
date中有以下日期:
date
2010-11-25
2010-11-24
2010-11-10price如下:
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我应该
id date price
A 2010-11-26 24.99
B 2010-11-26 26.51对于2010-11-10
id date price
A 2010-11-13 22.12
B 2010-11-22 27.95对于2010-11-24
id date price
A 2010-11-24 27.99
B 2010-11-24 23.24等。
我相信为给定的日期获得结果是可行的(可能是组by...having),但是我正在寻找一个解决方案,为所有的日期做到这一点。
编辑:
这个例子中有一个错误,改正了.
发布于 2011-08-24 21:13:18
我想你是认真的,但你的例子可能有错误。(或误解)。
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发布于 2011-08-24 21:44:01
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
)发布于 2011-08-24 21:52:26
这应该对你有用,我想:
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,3from子句中的虚拟表应为价格表中的每个"id“提供1行,其日期大于或等于日期表中的候选日期。
https://stackoverflow.com/questions/7182254
复制相似问题