合并函数填充日期(Postgresql)

时间:2016-03-13 20:37:02

标签: sql postgresql syntax coalesce

我有一个看起来像这样的表:

    M_DATE    SPEND  M_CLIENT     M_SHOW    ACQ   SP_DATE     A_DATE
    ------    ------   ---- -------- ----------- --------- ---------
    01/02/15  2000     1      GAME       NULL    01/02/15   NULL
    01/03/15  NULL     1      GAME       3       NULL       01/03/15
    01/04/15  NULL     1      GAME       6       NULL       01/04/15
    02/04/15  3000     2      BOOK       NULL    02/04/15   NULL
    02/05/15  NULL     2      BOOK       5       NULL       02/05/15

编辑:我想将cost_date列中的空值替换为给定ID和类型的最新非null cost_date。

理想情况下,生成的表格如下所示:

    M_DATE    SPEND  M_CLIENT     M_SHOW    ACQ   SP_DATE     A_DATE
    ------    ------   ---- -------- ----------- --------- ---------
    01/02/15  2000     1      GAME       NULL    01/02/15   NULL
    01/03/15  NULL     1      GAME       3       01/02/15   01/03/15
    01/04/15  NULL     1      GAME       6       01/02/15   01/04/15
    02/04/15  3000     2      BOOK       NULL    02/04/15   NULL
    02/05/15  NULL     2      BOOK       5       02/04/15   02/05/15

我目前正在尝试进行自我加入并自行合并cost_date。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

我使用了LEAD函数:lead(sp_date)OVER(PARTITION BY m_client,m_TYPE ORDER BY sp_date)AS next_date

结果:

M_DATE    SPEND  M_CLIENT  M_TYPE    ACQ   SP_DATE   next_date
------    ------   ---- -------- ----------- --------- ---------
01/02/15  2000     1      GAME       NULL    01/02/15   02/04/15
01/03/15  NULL     1      GAME       3       NULL         NULL
01/04/15  NULL     1      GAME       6       NULL         NULL
02/04/15  3000     1      GAME       3       02/04/15     NULL
02/05/15  NULL     2      BOOK       5       01/02/15     NULL

答案 1 :(得分:0)

我没有PostgreSQL访问验证,但这样的事情应该有效:

创建一个包含要设置为的日期的查询:

SELECT id, cost_date
FROM tblName
WHERE cost is not null

将其设为视图或子选择,以便通过ID将其加入到您的表格中,然后按照您的意图合并