有没有办法让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分钟后,它将返回苹果,橙子,香蕉等。
所有这一切背后的想法是在全球范围内逐步释放行而不是一次性。
更具体的例子是今天在维基百科中编辑的文章,或者由您的朋友发布的图片。您可以一次性使用所有内容,但我宁愿在固定/用户指定的时间内逐步执行此操作。如果有更好的方法,我想知道。
答案 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()
。