使用SQL

时间:2015-09-27 12:08:18

标签: sql postgresql

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

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

因此,如果这些是行(created_at应该是日期时间类型,这里的数字是为了简化示例)

**food, created_at**
apple, 1
orange, 2
banana, 3
meat, 4
brocolli, 5
tomato, 6

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

所有这一切背后的想法是在全球范围内逐步释放行而不是一次性。

更具体的例子是今天在维基百科中编辑的文章,或者由您的朋友发布的图片。您可以一次性使用所有内容,但我宁愿在固定/用户指定的时间内逐步执行此操作。如果有更好的方法,我想知道。

1 个答案:

答案 0 :(得分:0)

假设我们从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计算为current_timestamp - "*starting time"*(例如current_timestamp - timestamp '2015-09-27 16:00:00'),然后使用&#34;截断&#34;生成的间隔到您感兴趣的单位(使用date_trunc()

请注意current_timestamp为您提供交易开始时的当前时间。因此,除非您在自动提交模式下运行,否则您可能希望使用clock_timestamp()