SQL中迄今为止的时间戳

问题描述

这是我所做的:

Select count(check_id)
From Checks
Where timestamp::date > '2012-07-31'
Group by 1

像我那样做是对的还是有更好的方法?我应该/应该在WHERE子句中使用DateDIFF函数吗?类似于:DATEDIFF(day,timestamp,'2012/07/31')> 0

此外,我需要弄清楚如何计算此项目的总接受率 时间段?谁能提供他们的专业知识?

解决方法

像我那样做是对的还是有更好的方法?

使用这样的强制转换是将时间戳转换为date的一种完美有效的方法(不过,我不理解对不存在的datediff的引用-为什么要在时间戳上添加任何内容来更改它)

但是,强制转换有一个缺点:如果"timestamp"列上有索引,则将不使用它。

但是,由于您只想在某个日期之后的 范围内,因此没有必要将列强制转换为开始。

以下内容将实现与您的查询相同的功能,但是可以在列"timestamp"上使用索引,以防存在一个索引并且优化器认为使用该索引是有益的。

Select count(distinct check_id)
From Checks
Where "timestamp" > date '2012-07-31' + 1

请注意选择+ 1的第二天,否则查询将包括该日期但午夜之后的行。

我从您的查询中删除了不必要的group by


如果要每天计数,则需要在SELECT列表中包括这一天。在这种情况下,投放是一种很好的方法:

Select "timestamp"::date,count(distinct check_id)
From Checks
Where "timestamp" > date '2012-07-31' + 1
group by "timestamp"::date