当前位置: 首页 > 面试题库 >

PostgreSQL如果缺少则使用上一行的值

居星阑
2023-03-14
问题内容

我有以下查询:

WITH t as (
  SELECT date_trunc('hour', time_series) as trunc 
  FROM generate_series('2013-02-27 22:00'::timestamp, '2013-02-28 2:00', 
                       '1 hour') as time_series
  GROUP BY trunc
  ORDER BY trunc
)
SELECT DISTINCT ON(trunc) trunc, id
FROM t
LEFT JOIN (
   SELECT id, created, date_trunc('hour', created) as trunc_u
   FROM event
   ORDER BY created DESC
) u
ON trunc = trunc_u

结果如下:

"2013-02-27 22:00:00";
"2013-02-27 23:00:00";2
"2013-02-28 00:00:00";5
"2013-02-28 01:00:00";
"2013-02-28 02:00:00";

表格event具有idcreated以及其他一些列,但此处仅与之相关。上面的查询为我提供了id在给定trunc时间段内生成的最后一个事件(由于DISTINCT ON每个周期都得到了很好的汇总)。

现在,NULL如果在给定的时间段内未发生任何事件,此查询将产生。我希望它返回以前的可用时间id,即使它来自不同的时间段。IE:

"2013-02-27 22:00:00";0
"2013-02-27 23:00:00";2
"2013-02-28 00:00:00";5
"2013-02-28 01:00:00";5
"2013-02-28 02:00:00";5

我确信我缺少一些简单的方法来完成此任务。有什么建议吗?


问题答案:

尝试:

WITH t as (
  SELECT time_series as trunc 
    FROM generate_series('2013-02-27 22:00'::timestamp, '2013-02-28 2:00', 
                         '1 hour') as time_series
)
SELECT DISTINCT ON(t.trunc) t.trunc, e.id
  FROM t
  JOIN event e
    ON e.created < t.trunc 
 ORDER BY t.trunc, e.created DESC

如果太慢-告诉我。我会给你一个更快的查询。



 类似资料:
  • 我们已经用jpackage打包了我们的应用程序,它工作得很好。 不知何故,有人无意中从安装目录中删除了主jar。从那时起,'。“exe”无法启动(显然)。问题是它没有显示任何类型的错误消息,所以我们花了一段时间才意识到出了什么问题。 有没有办法让exe至少显示一些有用的错误消息?

  • 除了手动反编译类,检查它的所有依赖项,以及这些依赖项是否在类路径上,等等,对每个依赖类无限....有没有任何方法可以准确地确定类路径中缺少了哪个类,从而导致Java无法加载我的主类? 另一个问题是缺少父/接口类的问题。但是我已经手动检查了所有祖先类或者在指定的类路径上,或者在JDK中,如下所示。

  • 我有日期值,很少日期是完整的(格式:yyyy-mm-dd,但作为文本,而不是日期格式),但很少日期有缺失的月和日值,现在我必须添加缺失的月和日。示例:如果缺少日,则必须将该月的第一天添加到日期中,如果缺少月和日,则必须将1月1日添加到年部分中,在sql中,我可以简单地将数字连接起来,如下所示: 现在类似的连接必须在POSTGRESQL中完成,我尝试使用CAST和to_char以及其他一些函数,但我

  • 在读取yaml时,如果遗漏了一个键,如何验证?用于读取yaml的API是snakeYaml

  • 问题内容: 我在Grails 2.0和Postgresql 9.1上遇到麻烦 我正在尝试使用顺序ID映射现有数据库。但是,即使没有在域中创建任何类,我也会遇到错误: 我的数据源是: Tee现有数据库是一个扑克软件数据库(Holdem经理)。我正在使用一个不使用序列的PlayerHand对象,但是Player对象具有一个序列表。 奇怪的是,在以前的程序中,我很容易使Player对象与Postgres

  • 问题内容: 考虑一下程序: 如果程序不带参数启动,则运行时类路径中是否需要Foo? 研究 报告链接错误时,Java语言规范相当模糊: 该规范为实现链接活动(以及由于递归,加载)的发生时间提供了实现上的灵活性,前提是尊重Java编程语言的语义,并且在初始化类或接口之前已对其进行了完全验证和准备,并且在链接过程中检测到的错误被抛出到程序中某个位置,在该位置程序执行了一些可能需要链接到错误所涉及的类或接