加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Postgres中的滚动连接(LOCF)

发布时间:2020-12-13 16:16:48 所属栏目:百科 来源:网络整理
导读:随着时间的推移,我已经习惯了data.table在r中滚动连接的非常有用的功能.这些利用了LOCF的操作(最后的观察结果).不幸的是,我被迫在一个我不太熟悉的环境中工作(使用postgres). SQL中是否有类似的操作(特别是postgres)? 这是我拥有的一个例子和我想要的输出:
随着时间的推移,我已经习惯了data.table在r中滚动连接的非常有用的功能.这些利用了LOCF的操作(最后的观察结果).不幸的是,我被迫在一个我不太熟悉的环境中工作(使用postgres). SQL中是否有类似的操作(特别是postgres)?

这是我拥有的一个例子和我想要的输出:

这是我的第一张桌子

dt1 = data.table(Date=seq(from=as.Date("2013-01-03"),to=as.Date("2013-06-27"),by="1 day"),key="Date")[,ind:=.I]

           Date ind
  1: 2013-01-03   1
  2: 2013-01-04   2
  3: 2013-01-05   3
  4: 2013-01-06   4
  5: 2013-01-07   5
 ---               
172: 2013-06-23 172
173: 2013-06-24 173
174: 2013-06-25 174
175: 2013-06-26 175
176: 2013-06-27 176

这是我的第二张桌子

dt2 = data.table(Date=seq(from=as.Date("2013-01-01"),to=as.Date("2013-06-30"),by="1 week"),key="Date")

          Date
 1: 2013-01-01
 2: 2013-01-08
 3: 2013-01-15
 4: 2013-01-22
 5: 2013-01-29
 ---
22: 2013-05-28
23: 2013-06-04
24: 2013-06-11
25: 2013-06-18
26: 2013-06-25

这是我将在data.table中用于所需输出的代码.

dt1[dt2,roll=Inf]

          Date ind
 1: 2013-01-01  NA
 2: 2013-01-08   6
 3: 2013-01-15  13
 4: 2013-01-22  20
 5: 2013-01-29  27
---
22: 2013-05-28 146
23: 2013-06-04 153
24: 2013-06-11 160
25: 2013-06-18 167
26: 2013-06-25 174

这甚至可以使用postgres(或更一般地说,SQL?非常感谢您提供的任何帮助.

我真的很想知道是否有人可以在不填充完整的交叉连接表的情况下执行此操作.但这是一个交叉连接的解决方案:

http://sqlfiddle.com/#!2/b2f3f/3/0

创建架构:

CREATE TABLE Table1
    (`t1` double,`ind` int)
;

INSERT INTO Table1
    (`t1`,`ind`)
VALUES
    (1,1),(1.9,2),(3.1,3),(4,4),(5.1,5),(5.9,6)
;

CREATE TABLE Table2
    (`t2` int)
;

INSERT INTO Table2
    (`t2`)
VALUES
    (1),(2),(3),(4),(5),(6)
;

查询:

select t2,max(ind)
from (select t2,ind
      from table1
      cross join table2
      where t1 <= t2) as foo
group by t2

结果:

T2  MAX(IND)
1   1
2   2
3   2
4   4
5   4
6   6

编辑:@Hadley的评论是正确的,使用上面的查询从未实现完整的交叉连接表,因为上面的查询产生与下面的查询相同的解释和结果:

select t2,max(ind)
from table1
cross join table2
where t1 <= t2
group by t2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读