当前位置: 首页 > 面试题库 >

Oracle Query: 在列中选择数据的最后更改

刘成礼
2023-03-14
问题内容

我有一个包含以下各列的表:

产品ID定价日期当前价格最后定价日期

我正在尝试编写一个查询,以显示产品的旧价格(Last_Price),然后将其更改为当前价格,这样我的结果如下所示

PRODUCT_ID  PRICE_DATE  PRODUCT_PRICE LAST_PRICE
BlueLotion  24/08/2018   £10.00        £7.50
BlueLotion  23/08/2018   £10.00        £7.50
BlueLotion  22/08/2018   £10.00        £7.50
BlueLotion  21/08/2018   £7.50         £6.50 
BlueLotion  20/08/2018   £7.50         £6.50 
BlueLotion  19/08/2018   £7.50         £6.50
BlueLotion  17/08/2018   £6.50         £7.50
BlueLotion  16/08/2018   £6.50         £7.50
BlueLotion  13/08/2018   £6.50         £7.50
BlueLotion  12/08/2018   £7.50          NULL
BlueLotion  11/08/2018   £7.50          NULL
BlueLotion  10/08/2018   £7.50          NULL

有效地选择更改之前数据的价值。一些需要测试的资源-您可以使用脚本快速创建表:

create table COMP_RESULTS (product_id varchar2(20), price_date date, product_price number);

insert into comp_results values ('BlueLotion','24 AUG 2018','10');
insert into comp_results values ('BlueLotion','23 AUG 2018','10');
insert into comp_results values ('BlueLotion','22 AUG 2018','10');
insert into comp_results values ('BlueLotion','21 AUG 2018','7.5');
insert into comp_results values ('BlueLotion','20 AUG 2018','7.5');
insert into comp_results values ('BlueLotion','19 AUG 2018','7.5');
insert into comp_results values ('BlueLotion','18 AUG 2018','6.5');
insert into comp_results values ('BlueLotion','17 AUG 2018','6.5');
insert into comp_results values ('BlueLotion','16 AUG 2018','6.5');
insert into comp_results values ('BlueLotion','15 AUG 2018','7.5');
insert into comp_results values ('BlueLotion','14 AUG 2018','7.5');
insert into comp_results values ('BlueLotion','13 AUG 2018','7.5');

对不起,每个人,我能补充一下其他并发症吗?我还需要在结果表中添加一列,以显示Last_Date_With_Prev_Price。因此,最终结果集为

PRODUCT_ID  PRICE_DATE  PRICE  LAST_PRICE  DATE_WITH_PREV_RATE
BlueLotion  24/08/2018  £10.00  £7.50       21/08/2018
BlueLotion  23/08/2018  £10.00  £7.50       21/08/2018
BlueLotion  22/08/2018  £10.00  £7.50       21/08/2018
BlueLotion  21/08/2018  £7.50   £6.50       17/08/2018
BlueLotion  20/08/2018  £7.50   £6.50       17/08/2018
BlueLotion  19/08/2018  £7.50   £6.50       17/08/2018
BlueLotion  17/08/2018  £6.50   £7.50       12/08/2018
BlueLotion  16/08/2018  £6.50   £7.50       12/08/2018
BlueLotion  13/08/2018  £6.50   £7.50       12/08/2018
BlueLotion  12/08/2018  £7.50   NULL        NULL
BlueLotion  11/08/2018  £7.50   NULL        NULL
BlueLotion  10/08/2018  £7.50   NULL        NULL

问题答案:

一个简单的方法是在select子句中使用子查询:

select
  product_id,
  price_date,
  product_price,
  (
    select
      max(before.product_price) keep (dense_rank last order by before.price_date)
    from comp_results before
    where before.product_id = comp_results.product_id
      and before.price_date < comp_results.price_date
      and before.product_price <> comp_results.product_price
  ) as last_price
from comp_results
order by product_id, price_date desc;


 类似资料:
  • 问题内容: 我已经做了一些寻找该问题答案的搜索,但是我能弄清楚的是: 在我看来,这似乎很古怪,又不合蟒蛇风(而且很慢?)。 在不指定列名的情况下,为pandas数据框中的最后一列选择数据的最简单方法是什么? 问题答案: 使用iloc并针对最后一列()选择所有行():

  • 问题内容: 我有超过35列的表,前20列是固定的,并且每个表中的列号都不同。我需要从表中选择最后10列,例如,我该如何实现?就像此查询返回前20条记录 我想对列执行相同的操作,即在查询中返回列名称,然后在其他查询中使用这些名称,例如: 问题答案: 您可以通过准备好的语句来实现。您的查询将如下所示: -这将创建一个内容如下的SQL: (在样品上方我不得不选择在2列中,可在该部分进行调整:) 因此,您

  • 问题内容: 好的,因此我对其他解决方案没有任何帮助。所以这就是我想要做的。我需要选择多列的行,其中一列的值是最大值。 这是样本数据 我需要选择整行,其中orderfileid是每个唯一商品编号的最大值 返回的数据集应该看起来像 我想我尝试过可以想到的select max(orderfileid)的每种组合 任何帮助都将被申请。谢谢 问题答案: 您需要在子查询中找到MAX值,然后使用这些结果将其连接

  • 问题内容: 是否可以对位于同一服务器上的不同数据库进行选择(或插入)语句?如果是,怎么办? 问题答案: 您将使用以下语法指定数据库 例:

  • 问题内容: 如何在MySQL表中最后一行? 我正在读取数据,我需要从上一行中检索列值。 桌子上有一个。 问题答案: 是的,那里有一个auto_increment 如果您想要表中 所有行 的最后 一行 ,那么最后就是正确答案的时候了!有点儿:

  • 问题内容: 我在不同的列中有数据,但是我不知道如何提取数据以将其保存在另一个变量中。 如何选择然后将其保存到df1中? 我试过了 似乎没有任何工作。 问题答案: 列名(字符串)无法按照你尝试的方式进行切片。 在这里,你有两个选择。如果从上下文中知道要切出哪些变量,则可以通过将列表传递给语法来仅返回那些列的视图。 或者,如果需要对它们进行数字索引而不是按其名称进行索引(例如,你的代码应在不知道前两列