选择给定日期之前的最新行

问题描述 投票:0回答:1

我尝试将日期与不同行中的日期进行比较。我希望图片能使它清晰。

例如:

“ 6月”中ID为“ 2”的产品应支付100美元的费用,因为该费用在4月到7月有效。

enter image description here

sql postgresql date greatest-n-per-group
1个回答
0
投票

对于单个给定的product_id

SELECT *
FROM   product    p
JOIN   productfee f ON f.valid_from <= p.date
WHERE  p.product_id = 2
ORDER  BY f.valid_from DESC
LIMIT  1;

如果表的大小不重要,则最好至少具有以下索引:

CREATE INDEX ON product (product_id, date);
CREATE INDEX ON productfee (valid_from DESC);

如果valid_from可以为NULL,请考虑NULLS LAST。参见:

显然,您将使用正确的datetimestamp类型,而不仅仅是月份名称。

© www.soinside.com 2019 - 2024. All rights reserved.