【问题标题】:Get sequential dates in query获取查询中的连续日期
【发布时间】:2018-01-25 03:47:04
【问题描述】:

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

【问题讨论】:

  • 样本数据真的很有帮助。一个客户在某一天可以有多个记录吗?有时间成分吗?
  • 编辑问题
  • 那么,在您的问题中,“当天”是查询的参数,还是今天?虽然我不确定我是否理解了整个问题,但似乎这可以表示为一个复杂的 WHERE 子句,其中几个分离子句涵盖了不同的场景。这不漂亮,但那行不通吗?

标签: sql postgresql


【解决方案1】:

加入表并使用laglead 窗口函数和OVER (ORDER BY dates.datetime) 之类的窗口子句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2013-08-30
    相关资源
    最近更新 更多