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

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

例如:

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

【问题讨论】:

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

标签: sql postgresql date greatest-n-per-group


【解决方案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。见:

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

【讨论】:

    猜你喜欢
    • 2013-02-04
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多