postgresql - Postgres : Selecting a 24 hour window for multiple dates and picking the initial date as start date

标签 postgresql date

我正在尝试为天数列表选择 24 小时数据 block 并保留开始日期。用表格描述更容易,所以我会这样做:

原始表

ID      localminute          Usage
1   01-01-2013 00:00:00-05    3
.
.
1   12-31-2013 00:00:00-05    4
2
.
.

假设我感兴趣的日期是 2 月 1 日和 2 月 12 日。那么我想要的是从 2 月 1 日上午 8 点到 2 月 2 日上午 07:59 以及 2 月 12 日上午 8 点到 2 月 13 日上午 7:59 的总使用量。

这将针对每个人,因此我的输出将是:

ID       Eventday      Total
 1      02-01-2013      78
 1      02-01-2013      89
 2      02-13-2013      94
 2      02-13-2013      67
 .
 .

我的问题是将我开始计算项目的日期添加到事件日,即情况 1 中的 2 月 1 日和第二种情况中的 2 月 13 日,由于日期重叠,我不确定该怎么做。我获取聚合减去日期的简单查询如下:

create table aggregates as
select id, sum(usage) as total
from source_table
where localminute between '02-01-2013 08:00' AND '02-02-2013 07:59'
group by dataid

union  

same as above for February 13th. 

如果我选择日期列并添加日期列,因为它在 group by 语句中,我无法控制日期项,因为它随机出现为 02-01-2013 或 02-02-2013,具体取决于情况。

有没有办法通过将我的日期存储在列表等中来为每次迭代或其他一些解决方法手动将日期输入到列中?

如有任何帮助,我们将不胜感激!

最佳答案

看起来您想要的是将上午 8 点之前发生的所有事情都计入前一天。在这种情况下,您可以将时间戳偏移 8 小时,截断当天,并将其用于分组。

SELECT id, date_trunc('day', localminute - '8 hours'::interval)::date,
       SUM(usage)
FROM source_table
GROUP BY id, date_trunc('day', localminute - '8 hours'::interval)

如果您只对 01 Feb 2013 08:00 之间的数据感兴趣和 13 Feb 2013 08:00 , 您可以添加 WHERE localminute >= '01 Feb 2013 08:00'::timestamptz AND localminute < '13 Feb 2013 08:00'::timestamptz (在 GROUP BY 之前)。

我会避免 '02-02-2013 07:59'并在 '02-13-2013 08:00' 上求一个严格的不等式, 以便能够捕获最后一分钟发生的条目 ( BETWEEN includes the end of the range )。或者,如果您使用的是足够新的 PostgreSQL 版本,则可以使用 range type ,尽管对于像这样相当短的东西,两个不等式(如上所述)似乎是合理的。

关于postgresql - Postgres : Selecting a 24 hour window for multiple dates and picking the initial date as start date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31167041/

相关文章:

java - 尝试通过 java/spring 访问 Postgresql 时出错

http - 如何将日期值作为 POST 参数发送?

java - 为什么 Jackson ObjectMapper 在将 JSON 字段转换为 Date 对象时出现此错误?无法从 String 反序列化 java.util.Date 类型的值

PHP 从 HTML 表单中回显日期并将其从 Y-m-d 格式化为 d-m-Y 错误 31-12-1969

ruby-on-rails - Rails 应用程序无法连接到 PostgreSQL

sql - 我可以 DRY SQL 吗?如何在 BEGIN ... COMMIT 中调用两个 SQL 脚本?

javascript - 新日期 ("")添加 GMT 时间

java - 确定日期是否是二进制的

json - 如何在postgresql中解析JSON

SQL:根据用户注册表和事件日志计算第一天保留率