Postgresql 按日期范围分组结果
我在PostgreSQL中有一个带有时间戳列的表,需要计算24小时间隔的交互次数。样本数据: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:
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能得到礼物吗?