Select 给定日期之前的最新行

Select latest row before for given date

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

例如:

"June" 中 ID 为“2”的产品应收取 100 美元的费用,因为该费用的有效期为 4 月至 7 月。

对于给定的单个 product_id:

SELECT * -- which columns do you need?
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);
CREATE INDEX ON productfee (valid_from DESC);

(或更专,视全图而定。)

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

  • Sort NULL values to the end of a table

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