我使用的是Oracle 19c。我不允许使用ORDER BY进行子选择。
我需要从最大ID行中获取某些列作为子选择(因为Hibernate公式(:
Plans.javaPlans_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的情况下重写它,但将其保留为Sub-Select?
我不会做max(last_changed_date)
。根据ID,最大LastChangedDate可以位于与最近一行不同的行上;这意味着ID的最后一行将具有NULL LastChangedDate,这就是我必须返回的内容。因此,我需要从Max ID行获取特定列(在本例中为last_changed_date
(。
我不了解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>