【发布时间】: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