我需要查询方面的帮助,比方说这是表中的数据。
timestamp
-------------------
2010-11-16 10:30:00
2010-11-16 10:37:00
2010-11-16 10:40:00
2010-11-16 10:45:00
2010-11-16 10:48:00
2010-11-16 10:55:00
2010-11-16 10:56:00
我想获得至少比最后一行晚5分钟的每一行(时间戳)。在这种情况下,查询应返回:
timestamp
-------------------
2010-11-16 10:30:00
2010-11-16 10:37:00
2010-11-16 10:45:00
2010-11-16 10:55:00
由于每一行都取决于之前的一行,因此很难使用基于集合的方法来解决。求助于递归CTE(这是标准SQL):
WITH RECURSIVE cte AS (
(SELECT ts FROM tbl
ORDER BY ts
LIMIT 1)
UNION ALL
(SELECT t.ts
FROM cte c
JOIN tbl t ON t.ts >= c.ts + interval '5 min'
ORDER BY t.ts
LIMIT 1)
)
SELECT * FROM cte ORDER BY ts;
请注意我的初稿中的更新:
递归CTE中不允许使用聚合函数。我用ORDER BY
/代替,当/上LIMIT 1
的 索引 支持时应该很快ts
。
UNION
查询每条腿周围的括号对于允许是必须的LIMIT
,否则将仅在UNION
查询结束时允许一次。
遍历已排序表的过程解决方案(带有plpgsql函数的示例)可能会快很多,因为它可以通过单个表扫描来解决:
CREATE OR REPLACE FUNCTION f_rowgrid(i interval)
RETURNS SETOF timestamp AS
$func$
DECLARE
_this timestamp;
_last timestamp := '-infinity'; -- init so that 1 row passes
BEGIN
FOR _this IN
SELECT ts FROM tbl ORDER BY 1
LOOP
IF _this >= _last + i THEN
RETURN NEXT _this;
_last := _this;
END IF;
END LOOP;
END
$func$ LANGUAGE plpgsql;
称呼:
SELECT * FROM f_rowgrid('5 min')
SQL Fiddle 演示了两者。
问题内容: 我有一个监视系统,它每n秒收集一次数据(n大约为10,但有所不同)。我想每隔15分钟汇总一次收集的数据。有没有一种方法可以将时间戳记值合并为15分钟的块,以便分组工作? 问题答案:
问题内容: 我想创建一个Ecto查询,该查询按表的年龄(即“最小年龄(月)->最大年龄(月)”)过滤表中的记录。 一种简单的方法是Ecto功能: 这样做的问题是,并非所有孩子都在同一时区,当然也不是所有孩子都在同一时区。该查询将非常接近,但没有发现(有些会在一天之内关闭)。 我一直在尝试使用PostgreSQL的功能来使此查询工作。我可以使用SQL客户端使其正常工作,但是在尝试对片段中的值进行插值
问题内容: 我有一个天气数据库,它大约每70秒获取一次数据集(取决于气象站何时发送数据)。 我想使用Pchart绘制图形,但是我有太多样本,所以X轴被拧紧了。 所以我想要大约每5分钟一次的数据。(或每30分钟) 我当前有的查询是这样的: 这样可以获取最近24小时的样本,但数量太多。 问题答案: 以下内容将为您提供一个示例,该示例包含时间戳记为:00,:05,:10 …的任何数据。 我正在使用取模函
问题内容: 我正在尝试将整数形式的分钟转换为postgres中的间隔 是他们的任何功能将帮助我将其转换为间隔还是我应该将其除以60并获得最终结果 问题答案: 最快的方法是 所以看起来像这样(@Teddy建议) 或者, 并不是说这是最干净的,如果速度不是问题,我更喜欢提到的方法@a_horse_with_no_name
问题内容: 我正在尝试在postgres中的查询中使用group by。我无法按照我想要的方式对其进行工作,以便根据需要对结果进行分组。 这是对我刚刚回答的递归查询的另一个堆栈问题的扩展。但是现在我需要能够将结果分组到最终查询的root_id列上。这是之前的查询: 这是我想做的,以便将具有相同parent_comment_id的所有记录保存在一起。 可能有许多记录返回了相同的parent_comm
我在Athena中有一个表,其中每个记录都有一个时间戳,如。 这方面的SQL语句是什么?我试过使用和,但我不确定我是否正确地使用了它,或者它是否在Presto(雅典娜的SQL查询引擎)中得到支持。 任何帮助都会很好!