如何按日期范围恢复行

问题描述 投票:0回答:1

我正在尝试缩小我的数据库,它有很多条目,我想恢复,因为有效价格可以显示在一行中,但显示在很多行中。

样本数据:

时间戳 项目 价格 valid_from 有效期至
0x949DFFA0 A001 70 01/01/2020 2020/01/31
0x949DFFA1 A001 70 02/01/2020 2020/04/30
0x949DFFA2 A001 70 05/01/2020 2020/06/30
0x949DFFA3 A001 70 07/01/2020 01/31/2021
0x949DFFA4 A001 85 02/01/2021 06/30/2021
0x949DFFA5 A001 85 07/01/2021 10/31/2021
0x949DFFA6 A001 70 11/01/2021 01/01/2022

...应该导致数据:

时间戳 项目 价格 valid_from 有效期至
0x949DFFA0 A001 70 01/01/2020 01/31/2021
0x949DFFA4 A001 85 02/01/2021 10/31/2021
0x949DFFA6 A001 70 11/01/2021 01/01/2022

我生成了一个表,其中包含由项目和价格组成的人工关键字,以找出 MIN(valid_from) 日期以及 MAX(valid_till) 和 PARTITION BY。但这并不能正常工作,因为有时在短时间内上涨后,后来的价格与几个月前的价格相同。 事实上,如果下一行的价格相同,我将不得不浏览按日期排序的表格并检查。如果是,则必须接管 valid_till 日期并且必须删除下一行。 即使我能够在表格中正确显示数据(我不是),我仍然必须修改和删除相关行。 任何人都可以帮助或提示如何设法修改现有数据和删除备用行吗? 非常感谢

date resume group
1个回答
0
投票

看来我找到了可行的方法:

  1. 我选择临时表中的所有数据,这些数据按 valid_from 日期排序,并带有三个附加字段:prevPrice AND prevValidFrom 和 prevTimestamp。

    LAG([price], 1,0) OVER (ORDER BY item, [valid_from] ) AS prevPrice,

    LAG([valid_from], 1,0) OVER (ORDER BY item, [valid_from] ) AS prevValidFrom,

    LAG([timestamp], 1,0) OVER (ORDER BY item, [valid_from] ) AS prevTimestamp

  2. 然后我用 price = prevPrice 更新真实数据库中的所有行(按时间戳)并将 valid_from 设置为 prevValidFrom

  3. 接下来我删除真实数据库中的所有行(通过 prevTimestamp),价格 = prevPrice

  4. 最后删除临时表

这应该有效。

© www.soinside.com 2019 - 2024. All rights reserved.