Postgresql - 数据采用以下格式
我目前正在使用以下SQL来获取为物业设置的所有预订日期
但是,在一天内,当用户多次更改某个属性的预订日期时,会创建多个条目,这会使汇总结果膨胀。
我可以将if-else
逻辑应用于重叠的booking_dates(以红色和黄色突出显示),只选择max(updated_at)的预订日期(以黄色突出显示)?
例如,红色和黄色行的预订日期重叠。如果我应用以下SQL,那么我的总和将是不正确的。所以,我只需要考虑updated_at最多的预订日期
WITH X AS (SELECT distinct booking_end_date, booking_start_date, P_id
FROM booking)
SELECT sum(X.booking_end_date-X.booking_start_date) as Available, X.P_id
from X
group by X.P_id
答案 0 :(得分:1)
您可以使用distinct on
获取每天的最后一个条目:
WITH X AS (
SELECT DISTINCT ON (pid, date_trunc('day', updated_at)) b.*
FROM booking b
ORDER BY pid, date_trunc('day', updated_at), updated_at desc
)
select sum(X.booking_end_date - X.booking_start_date) as Available,
X.P_id
from X
group by X.P_id