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

Posted

技术标签:

【中文标题】选择给定日期之前的最新行【英文标题】:Select latest row before for given date 【发布时间】:2020-07-31 12:01:21 【问题描述】:

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

例如:

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

【问题讨论】:

欢迎来到 Stack Overflow!请注意,纯 text 非常适合数据。不是图像。始终声明您的 Postgres 版本。并尝试明确你的任务。您的问题有解释的余地​​。 【参考方案1】:

对于单个给定的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 类型,而不仅仅是月份名称。

【讨论】:

以上是关于选择给定日期之前的最新行的主要内容,如果未能解决你的问题,请参考以下文章

有关给定日期的sql查询,如果不存在,请提供最新日期

按日期选择最后一项

从两个表创建一个临时表,选择特定日期之前的最新日期

为每个用户选择最新和第二个最新日期行

如何编辑我的 postgreSQL 查询以按日期选择几列的最新行

在一些“左连接”之后选择具有最新日期时间字段的完整行