【问题标题】:Getting records from the past x weeks获取过去 x 周的记录
【发布时间】:2018-02-08 07:15:17
【问题描述】:

我一直在解决一个关于查询created_at 在当前或过去 x 周内的记录的问题。说,今天是星期三,所以如果 x = 1,那么从星期一午夜到现在。如果 x > 1,我正在寻找本周、今天或过去一周,但不使用常规interval '1 week' 因为这会让我从周三到周三,而且我只关注“整个”周。

我已经尝试过间隔解决方案,以及WHERE created_at > (CURRENT_DATE - INTERVAL '5 week') 之类的方法。 将首选适用于日、月、年等的解决方案,因为我实际上是通过其他一些后端逻辑构建查询。

我正在寻找一个通用查询“查找所有已创建 'x 个周期' 的内容。


编辑:

自上次以来,我已经在我的 Ruby on Rails 应用程序中实现了这一点。这在使用 HOUR 时引起了一些问题。除了 HOUR(MONTH、DAY 和 YEAR)之外,构建的所有内容都适用

SELECT "customer_uses".* 
FROM "customer_uses" 
WHERE (customer_uses.created_at > DATE_TRUNC('MONTH', TIMESTAMP '2017-09-17T16:45:01+02:00') - INTERVAL '1 MONTH')

这在我的测试用例中可以正常工作。 (检查这个计数)。 TIMESTAMP 由DateTime.now 生成,以确保我的测试用例使用“时间旅行”测试的时间覆盖,因此不使用内置函数。

(我已经去掉了一些多余的 WHERE 调用,它们应该是不相关的)。

为什么 HOUR 不起作用对我来说是个谜,因为我将它与 HOUR 的插值字符串一起使用,而不是像上面这样的 MONTH

SELECT "customer_uses".* 
FROM "customer_uses" 
WHERE (customer_uses.created_at > DATE_TRUNC('HOUR', TIMESTAMP '2017-09-17T16:45:21+02:00') - INTERVAL '1 HOUR')

【问题讨论】:

  • WHERE created_at > (CURRENT_DATE - INTERVAL '5 week') 有什么问题?您是否在此处询问任何时间段(例如月、周)的多个查询?
  • 也许:where date_trunc('week', created_at) > date_trunc('week', current_date) - interval '5 week'
  • 我正在寻找使用一周的开始。我想查询将是“相同的”,因为它只是INTERVAL '5 month',对@TimBiegeleisen?
  • @FrederikSpang 您对DATE_TRUNC 的呼叫是definitely doing its job,所以我不确定问题出在哪里。你的查询没有按照你想要的方式运行怎么办?
  • 我不太确定 - 我只是在查询中尝试一些东西。我有自动化测试,对每个“类型”的时期都做同样的事情。 allow 2 pr 'period',做一个,测试可用性,做两个:测试可用性,做 4,确保不可用性。尝试使 4 和“Timetravel”前进,然后重试。只有 week 和 HOUR 在这里失败。

标签: sql postgresql date conditional-statements


【解决方案1】:

您当前建议的查询几乎是正确的,只是它使用当前日期而不是一周的开始:

SELECT * FROM your_table WHERE created_at > (CURRENT_DATE - INTERVAL '5 week')

相反,我们可以向后检查 5 周的间隔,但从当前周开始:

SELECT *
FROM your_table
WHERE created_at > DATE_TRUNC('week', CURRENT_DATE) - INTERVAL '5 week';

我相信您应该能够将上述查询用作其他时间段的模板,例如一定的月数。只需替换DATE_TRUNCWHERE 子句区间内的单位即可。

【讨论】:

  • 您的答案完美无缺,除了使用HOUR。我尝试添加应用程序渲染的CURRENT_DATE,以使用日期时间并指定DATE_TRUNC('hour', TIMESTAMP '....'),但这不适用于HOUR,但适用于DAY、MONTH YEAR。但是我现在已经接受了你的回答,因为我没有在原始答案中提到小时,否则这就是一种魅力
  • @FrederikSpang 感谢您的支持,但如果您可以在原始问题中提供一些数据,其中小时成为问题,我很乐意调查。
  • 会的。请稍等。
  • 更新了查询示例和更详细的描述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多