【发布时间】:2014-12-08 13:50:13
【问题描述】:
考虑以下查询:
SELECT DATE_TRUNC('hour', date_range)
FROM GENERATE_SERIES(:start_date, :end_date, :interval) as date_range
是否可以将GENERATE_SERIES(...) 用作表(数据源)?理想情况下,它应该是这样的:
t = series(start, end, as: 'date_range')
dt = Arel::Nodes::NamedFunction.new('DATE_TRUNC', ['hour', t[:date_range]])
t.project(dt)
更新1。为什么我需要GENERATE_SERIES?我有一些数据需要处理这些数据可用的时间戳,并将其输出为 2D 图。作为一个简单的例子,考虑clickstream = (id, created_at)。我想针对给定的日期时间网格(即Nov 17, Nov 18, Nov 19, ..., Nov 30)绘制在某个日期之前进行的多次点击。问题是我希望这一切都发生在 PostgreSQL 中。
更新2。没有变量的示例查询可能如下所示:
SELECT DATE_TRUNC('hour', date_range) FROM GENERATE_SERIES('2015-01-01 00:15:38'::TIMESTAMP, '2015-01-10 23:59:59'::TIMESTAMP, '1 HOUR') as date_range;
【问题讨论】:
-
除了您使用的代码之外,您能否简要描述一下您想要实现的目标?可能有更好或不同的解决方案不涉及
generate_series函数。 -
请提供一个不带变量的实际示例查询。
-
@SimoneCarletti 我用生成系列背后的动机更新了这个问题。现在有意义吗?
-
@dankohn 我用实际查询更新了问题。希望对您有所帮助。
标签: ruby-on-rails ruby arel