sql - 获取查询中的连续日期

标签 sql postgresql

我正在尝试查询 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

最佳答案

连接表并使用 laglead 窗口函数以及类似 OVER (ORDER BY dates.datetime) 的窗口子句。

关于sql - 获取查询中的连续日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48435331/

相关文章:

mysql - 无法弄清楚为什么在 MYSQL 中没有选择一行

sql - 按状态的 PostgreSQL 记录数

database - 错误状态 : PostgreSQLSeverity. 错误:指定的参数类型与查询 SELECT to_regclass(@tableName:text) 中的列参数类型不匹配

python - Django+Postgres FATAL : sorry, 客户端已经太多了

mysql - 当外键相似时如何获取单行

java - 如何创建一个更新查询来更改带有 sysdate 的字段值?

mysql - 选择不同的记录,同时从 MySQL 中选择第一次出现的记录

ruby-on-rails - require 'pg' 返回 true 但未能定义 PGconn 和 PG

postgresql - liquibase 中的 Postgres 删除函数显示错误

postgresql - 无法在 Kong 0.10.x 和数据存储 postgresql-9.6 之间建立 SSL/TLS 连接