SQL选择语句

SQL选择语句,sql,oracle,Sql,Oracle,我的桌子看起来像这样- EFF_DATE ID Col_A Col_B Col_C 01/01/1900 1122334 N N N 12/01/2010 1122334 NULL Y Y 12/02/2010 1122334 Y NULL NULL 12/21/2010 1122334 NULL NULL NULL 01/01/1900 44555222 N N N

我的桌子看起来像这样-

EFF_DATE    ID         Col_A  Col_B Col_C
01/01/1900  1122334    N      N     N
12/01/2010  1122334    NULL   Y     Y
12/02/2010  1122334    Y      NULL  NULL
12/21/2010  1122334    NULL   NULL  NULL
01/01/1900  44555222   N      N     N
12/02/2010  44555222   NULL   NULL  NULL
01/01/1900  897969595  N      N     N
11/22/2010  897969595  Y      NULL  NULL
01/01/1900  897969596  N      N     N
11/22/2010  897969596  Y      NULL  NULL
现在,我需要填充每个记录的所有列,这样,如果某个日期的Col_a为NULL,它应该填充来自上一个eff_日期的相同Id的Col_a值

这就是我想要的解决方案-

EFF_DATE    ID  Col_A   Col_B   Col_C
01/01/1900  01122334    N   N   N
12/01/2010  01122334    N   Y   Y
12/02/2010  01122334    Y   Y   Y
12/21/2010  01122334    Y   Y   Y
01/01/1900  044555222   N   N   N
12/02/2010  044555222   N   N   N
01/01/1900  897969595   N   N   N
11/22/2010  897969595   Y   N   N
01/01/1900  897969596   N   N   N
11/22/2010  897969596   Y   N   N
请帮忙! 我想使用简单的SELECT语句来实现这个结果。

在mysql中

UPDATE tbL_table 
JOIN (SELECT EFF_DATE, COl_A, @x:=@x+1 AS rnum FROM tbl_table) a ON a.EFF_DATE=tbl_table.EFF_DATE
JOIN (SELECT EFF_DATE, COl_A, @y:=@y+1 AS rnum FROM tbl_table) b ON b.rnum+1=a.rnum 
JOIN (SELECT @x:=0, @y:=0) as vars on true 
SET Col_A=IF(Col_A IS NULL, b.Col_A , Col_A)

不知何故,您需要在生效日期前订购,但这是我的基本想法。

这是甲骨文吗?如果是这样,您可以使用超前和滞后函数…粘贴时最有可能出现问题。。检查答案,因为它似乎没有意义。请使其可读。我不允许粘贴图片您使用的是什么数据库引擎?谢谢Matt。我使用Oracle。。我需要做什么改变才能使它在那里工作?