【发布时间】:2017-08-18 16:23:20
【问题描述】:
请帮助我构建 PostgreSQL 查询。 有2个表:products(id, title)和price(id, product_id, price_type, moment, value)
moment - 时间戳,可以是过去也可以是未来
假设 price_type 只有两个选项:retail 或 purchase
但是一种产品可能在不同的时刻有很多零售价。
我需要选择所有具有实际零售和购买价格的产品,比现在少。
我能做到
SELECT
products.id,
products.title_translations AS title,
retail_prices.moment AS ret_moment,
pur_prices.value AS purchase,
retail_prices.value AS retail
FROM products
LEFT OUTER JOIN prices AS pur_prices ON products.id=pur_prices.product_id AND pur_prices.price_type='purchase' AND pur_prices.moment<current_timestamp
LEFT OUTER JOIN prices AS retail_prices ON products.id=retail_prices.product_id AND retail_prices.price_type='retail' AND retail_prices.moment<current_timestamp
ORDER BY products.id;
它有效,但返回 具有所有价格的产品,但我只需要最后的价格(按时刻)。
【问题讨论】:
-
你的意思是现在的价格最近?
-
所以零售价和购买价应该在同一条线上,但可能有不同的“时刻”,对吧?
-
是的,在结果时刻没有问题
标签: sql postgresql join left-join