Выберите последнюю строку ранее для данной даты - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь сравнить дату с датами, которые находятся в разных строках. Я надеюсь, что картина проясняет.

Например:

Для продукта с идентификатором "2" в "июне" должна быть плата в размере 100 $, поскольку плата действительна с апреля по июль. .

enter image description here

1 Ответ

0 голосов
/ 18 апреля 2020

Для одного данного 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. См .:

Очевидно, вы будете использовать надлежащие типы date или timestamp , а не только названия месяцев.

...