【发布时间】:2020-11-27 05:56:01
【问题描述】:
我使用的表有时会重复相同的数据,我想查询它以获取最新的值和之前的值。表格是这样的:
+-------------+----------------+------+-------+
| Item Number | Effective Date | Cost | Price |
+-------------+----------------+------+-------+
| 1 | 01/01/2020 | 8.00 | 11.00 |
| 1 | 01/01/2020 | 8.00 | 10.50 |
| 2 | 09/22/2020 | 6.25 | 6.50 |
| 1 | 01/01/2020 | 8.00 | 10.50 |
| 1 | 05/07/2019 | 7.00 | 10.50 |
| 1 | 03/12/2018 | 6.00 | 10.50 |
| 2 | 03/12/2018 | 6.00 | 6.50 |
| 2 | 03/12/2018 | 6.00 | 6.50 |
| 1 | 01/01/2020 | 7.00 | 10.50 |
| 1 | 08/01/2016 | 5.25 | 10.50 |
+-------------+----------------+------+-------+
我试图让查询结果列出最近成本的日期,并且日期和成本是它之前的日期,并忽略所有重复的数据,如下所示:
+-------------+---------------+---------------+--------------+--------------+
| Item Number | Previous Date | Previous Cost | Current Date | Current Cost |
+-------------+---------------+---------------+--------------+--------------+
| 1 | 05/07/2019 | 7.00 | 01/01/2020 | 8.00 |
| 2 | 03/12/2018 | 6.00 | 09/22/2020 | 6.50 |
+-------------+---------------+---------------+--------------+--------------+
我一直在为延迟和分区而苦苦挣扎,但我仍然得到这样的重复:
+-------------+---------------+---------------+--------------+--------------+
| Item Number | Previous Date | Previous Cost | Current Date | Current Cost |
+-------------+---------------+---------------+--------------+--------------+
| 1 | 01/20/2020 | 8.00 | 01/01/2020 | 8.00 |
+-------------+---------------+---------------+--------------+--------------+
感谢您的任何想法!
【问题讨论】:
-
Effective Date有时间组件吗?如果不是,您怎么知道 4 条不同的 01/01/2020 记录中的哪一条是第 1 项的最新记录? -
请查看How to Ask。将其作为问题模板可以极大地提高您获得满意答案的机会。在这种情况下,实际表描述(如果可能,则为 ddl)和当前/最佳查询。据了解,它不起作用。此外,对于您的示例数据,您如何确定 Current_Date 和 Cost(假设 current_date 对应于您描述中的“最新”)。 item_number 1 和日期 2020-01-01 有 5 行,具有不同的演员表值。
-
正确。有多个行,其中项目、日期和成本相同。那就是问题所在。对于我需要的结果,它们都被认为是相等的,我需要最近日期之前的记录是以前的。
-
所以,就像我在示例结果中输入的那样:01/01/20 是项目 1 的最新成本 8.00。在那之前?它是 7.00,于 2019 年 5 月 7 日生效。没有当前或最佳查询,只有一个温暖的失败桶。
-
但是数据表明 01/01/2020 成本 8.00 比 01/01/2020 成本 7.00 更新?
标签: sql oracle duplicates