合并函数以填充日期 (Postgresql)

coalesce function to fill date (Postgresql)

我有一个 table 看起来像这样:

    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

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

理想情况下,生成的 table 应如下所示:

    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。有任何想法吗?

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

查询包含要设置为的日期:

SELECT id, cost_date
FROM tblName
WHERE cost is not null

将其设为视图或子选择以通过 id 将其加入您的 table,然后按您的预期合并

我使用了 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