【问题标题】:Query if a customer ID has a previous order in the last week: How To?查询某个客户 ID 上周是否有过订单:How To?
【发布时间】:2011-06-21 10:05:59
【问题描述】:

我正在使用 SQLite 3.7.4 并且有一个包含以下内容的表:

TABLE: 'Orders'
ID     OrderDate
1234   2011-06-01 00:00:00
1245   2011-06-04 00:00:00
1234   2011-06-05 00:00:00

我希望能够选择“OrderDate”和“ID”,对于给定的 OrderDate,在过去 1 周内有上一个订单。

所以,对于上面的数据:

  • 第一条记录 ID 1234 有顺序 在 2011-06-01 00:00:00,但没有 上一个 - 所以没有被选中。

  • 下一条记录 ID 1245 有订单 在 2011-06-04 00:00:00 但没有 2011-06-04 前一周,所以不是 选择。

  • 第 3 条记录 ID 1234 订单于 2011-06-05 00:00:00 有一个以前的 2011-06-01 订购,所以这个记录 被选中。

我刚刚设法使用strftime('%s',OrderDate) 了解日期差异,但无法通过获取 OrderDate 记录的yyyy-mm-dd 部分并回顾“-7 天”来了解如何查询查看该范围内是否有 1 条或多条记录?

任何指导表示赞赏:)

【问题讨论】:

  • 只是一个快速的建议——从你的解释中我了解到ID 指的是客户、客户或其他实体,而不是订单。如果您的 Orders 表中有一个 ID 列,它应该是一个 Order Id。您可以使用 CustomerID 或其他任何东西来区分(并且可能应该同时包含两者)。

标签: sqlite date


【解决方案1】:

我不确定我是否理解,但这给出了您正在寻找的输出,给出了示例数据。

sqlite> select o1.id, o1.orderdate from orders o1
   ...> inner join orders o2 on (o1.id = o2.id
   ...> and o2.orderdate >= date(o1.orderdate, '-7 day')
   ...> and o2.orderdate < o1.orderdate);
1234|2011-06-05

你应该看看 SQLite Date and Time Functions

【讨论】:

  • 由于条目的小时、分钟和秒设置为 00,我怀疑同一天的记录也是可以接受的。因此:inner join ... on o1.rowid &lt;&gt; o2.rowid and o1.id = o2.id and o2.orderdate BETWEEN ... AND ...)
  • @Benoit:你可能是对的。不过,我从未见过记录订单时间的会计系统,而且所有时间组件都是零。 (并不是说 那个 观察意义重大。也许 OP 会发表评论。)
  • 非常感谢。我将 HH:mm:ss 归零 - 但实际数据也已填充。查询给了我一个列表——我会验证它,但它看起来是正确的。出色的。非常感谢:)
猜你喜欢
  • 2019-12-20
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多