在"子选择"中,从不带ORDER BY的"最大ID行"中选择"列&qu



我使用的是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>

最新更新