0
我有一张包含appointment
记录的表,并且用户选择日期范围(begin_date
,end_date
)。我希望获得落在此日期范围内的appointment
以及过去和未来在此日期范围之外(又名,上一次出现和下一次出现)的最接近的实例。获取距离过去和未来最近的实例
我认为最好的方法是使用CTE和自联接,但我接受另一种策略。这是我当前的查询:
WITH present AS
(SELECT appt.ewssubject, appt.ewsstart::DATE, appt.ewsend::DATE
FROM appointment appt
WHERE (appt.ewsstart, appt.ewsend) OVERLAPS (begin_date::DATE, end_date::DATE))
SELECT
present.ewssubject, present.ewsstart, present.ewsend,
past.ewssubject AS pastsubject, past.ewsstart::DATE AS paststart,past.ewsend::DATE AS pastend,
future.ewssubject AS futuresubject, future.ewsstart::date AS futurestart, future.ewsend::date AS futureend
FROM present
LEFT JOIN appointment AS past USING (ewssubject)
LEFT JOIN appointment AS future USING (ewssubject)
WHERE
present.ewssubject = past.ewssubject AND
present.ewssubject = future.ewssubject AND
past.ewsend < present.ewsstart AND
future.ewsstart > present.ewsend
ORDER BY present.ewsstart ASC
我得到了巨大的appointments
列表,有很多重复的 - 像这样:
subject start end last_start last_end next_start next_end
DINNER 2015-09-18 2015-09 18 2015-09-17 2015-09-17 2015-09-19 2015-09-19
DINNER 2015-09-18 2015-09 18 2015-09-17 2015-09-17 2015-09-19 2015-09-19
... // more repeats! :(
所有我想要做的就是减少重复数量,如下格式:
subject start end last_start last_end next_start next_end
DINNER 2015-09-18 2015-09-18 2015-09-17 2015-09-17 2015-09-19 2015-09-19
DINNER 2015-09-21 2015-09-21 2015-09-18 2015-09-18 2015-10-02 2015-10-02
... // and so on
nb一个appointment
可以跨越多天。
我该如何解决我的问题?或者还有另一个我可以写的?
这个作品! sorta ...我怎么能让用户选择的'begin_date'和'end_date'使'before'和'next'的日期无界限?目前这只适用于如果下一个和上一个事件也发生在指定日期范围内 – yiwei
ahhh没关系我只是subqueried它 – yiwei