我有两个表:
表1:文章
Article_ID Price Valid from Price ID
1 12-Aug-2014 1
1 30-Dec-2014 2
1 10-Oct-2014 3
1 15-Oct-2014 5
2 13-Aug-2014 1
---(n no. of records for article 2)
3 01-July-2014 4
3 02-July-2014 5
---(n no. of records for article 3)
在这里,唯一键是Article_Id和有效起始日期。
这意味着每件商品的价格都不同,从某些日期起有效。有效期自同一日期起,商品不能有不同的价格。
表2:价格
Price ID Price
1 10
2 200
3 30
4 400
5 50
所需结果:
我想要每篇文章最少三个价格。为此,我需要加入,但我无法弄清楚如何限制否。每篇文章的行价格为3,以及如何实施最低费用。标准。
最终结果应为:
Article_ID Min Price1 Min Price2 Min Price3
1 10 30 50
2 10
3 50 400
一篇文章的最高 在三个价格中(最终结果),最小值可能为0。而三个价格是表2中商品的最小价格。
我知道它必须与分钟做些事情。(分组依据)和行号 (带有表2的联接),但是有人可以帮助我实现它吗?
关于SJ
如果需求遗体的3种价格在一系列枢轴,然后使用ROW_NUMBER()
将使给这些数字1,2,3,从那里是一个简单的使用case expressions
有group by
:
3个最低价格:
SELECT
a.article_id
, MAX(CASE
WHEN a.price_seq = 1 THEN p.price END) AS price_1
, MAX(CASE
WHEN a.price_seq = 2 THEN p.price END) AS price_2
, MAX(CASE
WHEN a.price_seq = 3 THEN p.price END) AS price_3
FROM (
SELECT
article_id
, price_valid_from
, price_id
, ROW_NUMBER() OVER (PARTITION BY article_id
ORDER BY p.price ASC) AS price_seq
FROM article
LEFT OUTER JOIN price p
ON (a.price_id = p.price_id)
) a
GROUP BY
a.article_id
ORDER BY
a.article_id
3最近价格
SELECT
a.article_id
, MAX(CASE
WHEN a.price_seq = 1 THEN p.price END) AS price_1
, MAX(CASE
WHEN a.price_seq = 2 THEN p.price END) AS price_2
, MAX(CASE
WHEN a.price_seq = 3 THEN p.price END) AS price_3
FROM (
SELECT
article_id
, price_valid_from
, price_id
, ROW_NUMBER() OVER (PARTITION BY article_id
ORDER BY price_valid_from DESC) AS price_seq
FROM article
) a
LEFT OUTER JOIN price p
ON (a.price_id = p.price_id)
GROUP BY
(a.article_id)
ORDER BY
a.article_id
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句