【问题标题】:How do I use returning into clause in Oracle sql such that I can reuse the returning value to find a previous row?如何在 Oracle sql 中使用返回到子句,以便我可以重用返回值来查找前一行?
【发布时间】:2020-08-28 23:05:35
【问题描述】:

所以我有一个看起来像这样的架构:

|ID | Date_of_transaction | Special_format_of_date_as_text | Data |

我遇到了这段代码,我使用以下格式的语句更新现有行:

UPDATE Data 
WHERE Date_of_transaction = TRUNC(SPECIFICED_DATE) 
returning special_format_of_date_as_text into date

但我真正想要的是前一周的 special_format_of_date_as_text,因为报告标题应该反映前一周的活动,而不是尚未发生的本周。

我的问题是我该怎么做?我试图使用“select special_format_of_date_as_text from table where Date_of_transaction = Date_of_transaction - 7”对返回子句进行子查询,但这似乎不起作用。

我的替代方法是直接返回日期,然后使用我在上面直接说明的类似查询创建另一个查询以获取上一个日期。

例子:

|ID | Date_of_transaction | Special_format_of_date_as_text | Data | Is_Updated |
|1| 28-Aug-2020 | 2020Aug28DeltaAlpha | 23.42| Y |
|2| 21-Aug-2020 | 2020Aug21DeltaAlpha | 0| N |
|3| 14-Aug-2020 | 2020Aug14DeltaAlpha | 0| N |
|4| 7-Aug-2020 | 2020Aug07DeltaAlpha | 0| N |

我想更新第 2 行,但我想返回的是 2020Aug14DeltaAlpha,因为那是报告实际反映的那一周,这也是我将用来命名我的报告的标题。

【问题讨论】:

  • 请以表格文本形式提供示例数据和所需结果。

标签: sql oracle


【解决方案1】:

如果我理解你的话,你需要将返回的表达式设为scalar sub query

UPDATE Data 
   SET ....
 WHERE Date_of_transaction = TRUNC(SPECIFICED_DATE) 
RETURNING (select special_format_of_date_as_text from table where Date_of_transaction = Date_of_transaction - 7) into date;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-06-27
  • 2022-01-17
  • 2016-10-24
  • 2012-01-13
  • 2011-06-27
  • 2019-05-02
  • 1970-01-01
相关资源
最近更新 更多