【发布时间】:2020-04-28 17:37:53
【问题描述】:
鉴于此数据集,每只股票都有年度价值快照。
+----+------+------+-------+-------+
| ID | Name | Year | Stock | Value |
+----+------+------+-------+-------+
| 1 | John | 2019 | ABC | 123 |
| 1 | John | 2020 | ABC | 123 |
| 1 | John | 2021 | ABC | 123 |
| 1 | John | 2021 | XYZ | 200 |
| 1 | John | 2022 | ABC | 123 |
| 1 | John | 2022 | XYZ | 200 |
| 1 | John | 2023 | ABC | 630 |
| 1 | John | 2023 | XYZ | 200 |
+----+------+------+-------+-------+
2019年,约翰只持有价值123的ABC
2020年,约翰也只持有ABC,价值123(未变)
2021年,John持有ABC,但也收购了XYZ,价值200
2022 年,John 持有 ABC 和 XYZ,这两个值都没有变化。
2023年,约翰持有ABC和XYZ,ABC的价值增加到630,XYZ的价值保持在200。
我想返回行以便
- 每年,如果 John 的投资组合自去年以来没有任何变化,则不会返回任何行
- 如果 John 的投资组合自去年以来发生任何变化,则会列出他目前持有的所有资产
例如,
+----+------+------+-------+-------+
| ID | Name | Year | Stock | Value |
+----+------+------+-------+-------+
| 1 | John | 2019 | ABC | 123 |
| 1 | John | 2021 | ABC | 123 |
| 1 | John | 2021 | XYZ | 200 |
| 1 | John | 2023 | ABC | 630 |
| 1 | John | 2023 | XYZ | 200 |
+----+------+------+-------+-------+
我将如何做到这一点,无论是通过 PL/SQL 中的函数还是纯 SQL 中的函数?
【问题讨论】: