我正在尝试查询Postgres数据库,以检索特定客户的记录,这些记录来自与当天相邻的日期。
例如:
如果今天是星期三,它将从周一和周二提取记录(如果存在的话)。
如果今天是星期三,如果星期二没有记录,它将不会从星期一开始记录。
如果从上周三开始记录,如果它们存在,它将在周二和周四拉。
数据库当前使用包含以下内容的日期表进行构建:
Id----------|------DateTime--------
Id与Customers表具有外键关系,包含:
CustomerId-------|-----DateId(fk)-----|----other columns.....
如果日期存在于查询日期之前和之后(并且如果存在则拉出该记录),我认为只是简单地查询数据库,然后循环使得成功将在.....之前或之后查询下一个日期.....但这似乎非常低效。
有没有更好的方法来获取这些记录?
编辑: 示例日期表:
Id | DateTime
1 | '2018-01-23 16:19:17.600305'
2 | '2018-01-24 00:03:11.213492'
3 | '2018-01-25 03:10:14.911771'
示例客户表:
Id | DateId | CustomerId | Location1 | Location2 | Transport
66 | 2 | 2 | Market | Library | Car
67 | 2 | 3 | Bookstore | Library | Car
68 | 3 | 3 | Pool | Town | Car
69 | 3 | 3 | Pool | Town | Bus
答案 0 :(得分:0)
加入表并使用lag
和lead
窗口函数以及OVER (ORDER BY dates.datetime)
等窗口子句。