我正在尝试查询 Postgres 数据库以检索特定客户的记录,这些记录的日期与当前日期相邻。
例如:
如果今天是星期三,它将提取星期一和星期二的记录(如果存在)。
如果今天是星期三,如果星期二没有记录,则不会从星期一拉取记录。
如果从上周三拉取记录,则将拉取周二和周四(如果存在)。
数据库当前由包含以下内容的 Dates 表构成:
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
最佳答案
连接表并使用 lag
和 lead
窗口函数以及类似 OVER (ORDER BY dates.datetime)
的窗口子句。
关于sql - 获取查询中的连续日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48435331/