[英]Retrieve records that are in the date ranges in PostgreSQL
对于每位客户,我都尝试检索最近submit_date
45天内的记录。
customer submit_date salary
A 2019-12-31 10000
B 2019-01-01 12000
A 2017-11-02 11000
A 2019-03-03 3000
B 2019-03-04 5500
C 2019-01-05 6750
D 2019-02-06 12256
E 2019-01-07 11345
F 2019-01-08 12345
窗口函数可以解救:
SELECT customer, submit_date, salary
FROM (SELECT customer, submit_date, salary,
max(submit_date) OVER (PARTITION BY customer) AS latest_date
FROM thetable) AS q
WHERE submit_date >= latest_date - 45;
我倾向于尝试:
select t.*
from t
where t.submit_date >= (select max(t2.submit_date) - interval '45 day'
from t t2
);
我认为这可以充分利用(submit_date)
上的索引。
如果要相对于每个客户使用此子句,请使用相关子句:
select t.*
from t
where t.submit_date >= (select max(t2.submit_date) - interval '45 day'
from t t2
where t2.customer = t.customer
);
这需要在(customer, submit_date)
上建立索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.