【问题标题】:In a Sub-Select, select Column from a Max-ID Row without ORDER BY在子选择中,从没有 ORDER BY 的 Max-ID 行中选择列
【发布时间】:2020-07-20 14:59:27
【问题描述】:

我使用的是 Oracle 19c。我不允许使用 ORDER BY 进行子选择。

我需要从 Max-ID 行中获取某些列作为子选择(因为休眠公式):

Plans.java PLANS_T 域对象

@Formula(value="
(SELECT wf.last_changed_date 
 FROM plan_workflow_t wf 
 WHERE wf.plan_id = id and rownum = 1 order by id desc)
")

有没有办法在没有 ORDER BY/rownum 的情况下重写它,但将其保留为子选择?

我不能max(last_changed_date)。 Max LastChangedDate 可以与 ID 的最新行位于不同的行;这意味着 ID 的最新行将具有 NULL LastChangedDate,这就是我必须返回的。所以我需要从 Max-ID 行中获取特定的列(在本例中为 last_changed_date)。

【问题讨论】:

  • 请添加几行样本数据和预期的结果。

标签: sql oracle hibernate


【解决方案1】:

我不知道 Hibernate,所以我不知道这些是否真的有帮助;试试看。

只是想知道使用的是什么日期格式:

SQL> alter session set nls_date_format = 'dd.mm.yyyy';

Session altered.

样本数据:

SQL> select * from plan_workflow_t order by plan_id;

   PLAN_ID LAST_CHANG
---------- ----------
         1 20.07.2020
         2 13.05.2020
         3 15.02.2018             --> you need this date value

最直接的查询:

SQL> select a.last_changed_date
  2  from plan_workflow_t a
  3  where a.plan_id = (select max(b.plan_id) from plan_workflow_t b);

LAST_CHANG
----------
15.02.2018

或者,也许是一个分析函数?

SQL> select max(x.retval) retval
  2  from (select first_value(a.last_changed_date) over (order by a.plan_id desc) retval
  3        from plan_workflow_t a
  4       ) x;

RETVAL
----------
15.02.2018

SQL>

【讨论】:

  • 是的,...= (select max(b.plan_id) from plan_workflow_t b); 工作,谢谢。
猜你喜欢
  • 2018-10-18
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 2021-03-12
  • 2011-12-10
  • 1970-01-01
  • 2022-10-06
  • 2015-11-11
相关资源
最近更新 更多