从过去的x周获取记录

问题描述:

我一直在处理有关查询created_at在当前或过去x周内的记录问题。假设今天是星期三,那么从星期一到午夜,直到现在,如果x = 1。如果x> 1,我正在寻找当前星期,直到今天或过去一周,但没有使用常规因为这会让我在星期三到星期三得到我,而我只是在看“整个”周。从过去的x周获取记录

我试过了间隔解决方案,还有像WHERE created_at > (CURRENT_DATE - INTERVAL '5 week')这样的东西。 这个解决方案适用于日,月,年等,因为我实际上是通过其他后端逻辑构建查询。

我正在寻找一个“找一个已经创造了一切的通用查询‘X期’回


编辑:

自去年的时候,我已经在我的Ruby实现了这个on Rails应用程序。使用HOUR时,这已经引起了一些问题,其内置是一切,但HOUR(月,日和年)

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代替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') 
+1

WHERE created_at>(CURRENT_DATE - INTERVAL'5 week')''有什么问题?你是否在这里要求几个查询,在任何时间段(例如,月,周)? –

+0

也许︰'where date_trunc('week',created_at)> date_trunc('week',current_date) - interval'5 week'' –

+0

我正在寻找使用周的开始。我想这个查询会是“相同的”,因为它会简单地在'INTERVAL'5个月',正确的@TimBiegeleisen? –

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

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_TRUNC中的单位和WHERE条款的间隔。

+1

除了使用'HOUR'外,您的答案完美无瑕,我尝试在应用中添加为了使用日期时间并指定'DATE_TRUNC('hour',TIMESTAMP'....')',提供'CURRENT_DATE',但是这对HOUR不起作用,但对于DAY,MONTH *和* YEAR起作用。我现在已经接受了你的答案,因为我没有在原始答案中提及小时,而且这种方式很有魅力 –

+0

@FrederikSpang我赞赏upvote,但是如果你可以提供一些你原来的问题的数据,我很乐意看到它的一个问题 –

+0

会做,只是片刻 –