Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
使用SQL泄漏存储桶_Sql_Postgresql - Fatal编程技术网

使用SQL泄漏存储桶

使用SQL泄漏存储桶,sql,postgresql,Sql,Postgresql,有没有办法让SQL查询以泄漏的bucket方式输出行 给定一组行(可能是几行,也可能是很多行),每个行都有一个created_at列,这些行将按其created_at的顺序每X秒递增检索一次,并从某个固定时间开始(如一天的开始) 因此,如果这些是行(创建时应为datetime类型,此处的数字用于简化示例) X是60秒,开始时间是现在,当执行查询时,它只返回apple。一分钟后,它将返回苹果和橙色。2分钟后,它将返回苹果、橘子、香蕉等 这一切背后的想法是在全球范围内逐步释放行,而不是同时释放所有内

有没有办法让SQL查询以泄漏的bucket方式输出行

给定一组行(可能是几行,也可能是很多行),每个行都有一个created_at列,这些行将按其created_at的顺序每X秒递增检索一次,并从某个固定时间开始(如一天的开始)

因此,如果这些是行(创建时应为datetime类型,此处的数字用于简化示例)

X是60秒,开始时间是现在,当执行查询时,它只返回apple。一分钟后,它将返回苹果和橙色。2分钟后,它将返回苹果、橘子、香蕉等

这一切背后的想法是在全球范围内逐步释放行,而不是同时释放所有内容


一个更具体的例子是今天在维基百科上编辑的文章,或者你朋友发布的图片。您可以一次消费所有东西,但我更愿意在固定/用户指定的时间内增量消费。如果有更好的方法,我想知道。

假设我们从
2015-09-27 16:00:00开始,表中的数据如下所示:

food     | created_at           
---------+--------------------
apple    | 2015-09-27 16:00:00
orange   | 2015-09-27 16:01:00
banana   | 2015-09-27 16:02:00
meat     | 2015-09-27 16:03:00
brocolli | 2015-09-27 16:04:00
tomato   | 2015-09-27 16:05:00
然后运行这个

select *
from data 
where created_at < timestamp '2015-09-27 16:00:00' + ((interval '1' minute) * X);
选择*
从数据
其中,在
获取第一行的
X=1
(第一次运行),第一行和第二行的
X=2
(第二次运行),依此类推

如果每次调用查询时都增加参数X,那么这应该可以满足您的需要

理论上,您可以将X计算为
当前时间戳-“*开始时间”*
(例如
当前时间戳-时间戳'2015-09-27 16:00:00'
),然后使用“截断”结果间隔到您感兴趣的单位(使用
日期trunc()


请注意,
current\u timestamp
为您提供事务开始时的当前时间。因此,除非您在自动提交模式下运行,否则您可能希望使用
clock\u timestamp()
相反。

datetime,我只写了一些数字来简化示例为什么要首先返回最旧的项目?不知何故,我认为这不是一个关于查询的问题,而是关于用户界面的问题。为什么要这样做?似乎您正试图将一些不应该移动到那里的业务逻辑移动到SQL。使用
where
排除不需要的行的子句?我不明白您在这里想做什么。@GordonLinoff您认为这是关于用户界面的。不是。我想查询数据。另一个例子是1000个聊天日志,我想每秒按顺序(从最早的开始)输出每一行。
select *
from data 
where created_at < timestamp '2015-09-27 16:00:00' + ((interval '1' minute) * X);