我有一个看起来像这样的表:
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。有任何想法吗?
答案 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将其加入到您的表格中,然后按照您的意图合并