Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 按日期范围分组结果_Postgresql_Date_Group By_Timestamp_Range - Fatal编程技术网

Postgresql 按日期范围分组结果

Postgresql 按日期范围分组结果,postgresql,date,group-by,timestamp,range,Postgresql,Date,Group By,Timestamp,Range,我在PostgreSQL中有一个带有时间戳列的表,需要计算24小时间隔的交互次数。样本数据: CREATED ----------------- 2019-04-03 17:20:50 2019-04-03 17:20:59 2019-04-03 18:41:18 2019-04-04 09:58:49 2019-04-04 09:58:53 2019-04-04 09:58:59 2019-04-04 10:01:55 2019-04-04 14:52:52 2019-04-04 15:10:

我在PostgreSQL中有一个带有时间戳列的表,需要计算24小时间隔的交互次数。样本数据:

CREATED
-----------------
2019-04-03 17:20:50
2019-04-03 17:20:59
2019-04-03 18:41:18
2019-04-04 09:58:49
2019-04-04 09:58:53
2019-04-04 09:58:59
2019-04-04 10:01:55
2019-04-04 14:52:52
2019-04-04 15:10:43
2019-04-04 15:10:53
2019-04-04 17:15:39
预期结果:

MIN(CREATED)            MAX(CREATED)          TOTAL
2019-04-03 17:20:50     2019-04-04 17:15:39   11
我目前有一个脚本,其中我将日期转换为秒,但我得到以下结果:

SELECT
    TIMESTAMP WITH TIME ZONE 'epoch' +
    INTERVAL '1 second' * trunc(extract('epoch' from created) / 86400) * 86400 as filtro,
    min(created),
    max(created),
    count(*)
FROM whts
GROUP BY filtro
ORDER BY max(created) desc;

FILTRO                      MIN(CREATED)                MAX(CREATED)                TOTAL
2019-04-04 00:00:00.000000  2019-04-04 09:58:49.000000  2019-04-04 17:15:39.000000  8
2019-04-03 00:00:00.000000  2019-04-03 17:20:50.000000  2019-04-03 18:41:18.000000  3


它应该返回一行,因为第一行是:2019-04-03 17:20:50,最后一行是2019-04-04 17:15:39。没有24小时过去。

您不能使用trunc函数,因为这是您所需的结果。 也许你可以尝试以下方法:
truncextract'epoch'from created select mincreated from whts/86400*86400

您不能使用trunc函数,因为这样可以获得所需的结果。
SELECT min(created)
     , max(created)
     , count(*)
FROM   whts
GROUP  BY date_trunc('day', created - time '17:20:50')  -- time of the start
ORDER  BY max(created) DESC;
也许你可以尝试以下方法: truncextract'epoch'from created选择mincreated from whts/86400*86400

SELECT min(created)
     , max(created)
     , count(*)
FROM   whts
GROUP  BY date_trunc('day', created - time '17:20:50')  -- time of the start
ORDER  BY max(created) DESC;
基本技巧是扣除开始班次值的时间分量以适应每日网格,然后您可以使用它来组成组

确定偏移量的最佳方法取决于缺少的任务定义。。。从哪里开始或结束

要仅从表中创建的最早版本开始,请执行以下操作:

SELECT min(created)
     , max(created)
     , count(*)
FROM   whts, (SELECT min(created)::time FROM whts) t(t_start)
GROUP  BY date_trunc('day', created - t.t_start) 
ORDER  BY max(created) DESC;
基本技巧是扣除开始班次值的时间分量以适应每日网格,然后您可以使用它来组成组

确定偏移量的最佳方法取决于缺少的任务定义。。。从哪里开始或结束

要仅从表中创建的最早版本开始,请执行以下操作:

SELECT min(created)
     , max(created)
     , count(*)
FROM   whts, (SELECT min(created)::time FROM whts) t(t_start)
GROUP  BY date_trunc('day', created - t.t_start) 
ORDER  BY max(created) DESC;

查询有5列,而预期输出只有3列。您实际想要的输出是什么?我已经更新了我得到的结果。您的查询有5列,而您期望的输出只有3列。您的实际期望输出是什么?我已经更新了进行此调整时得到的结果。当我只得到一个数据时,我有11个数据作为结果,在进行此调整时没有更多数据。我有11个数据作为结果,当我只得到一个时,再没有比这更好的答案了。你破了350K能得到礼物吗?回答很好,欧文+1。你破了350K能得到礼物吗?