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
显然,您将使用正确的 date
或 timestamp
类型,而不仅仅是月份名称。
我尝试将日期与不同行中的日期进行比较。希望图片能看清楚。
例如:
"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
显然,您将使用正确的 date
或 timestamp
类型,而不仅仅是月份名称。