查找没有子查询的最大 sID [重复]

Posted

技术标签:

【中文标题】查找没有子查询的最大 sID [重复]【英文标题】:Find max sID without subquery [duplicate] 【发布时间】:2021-04-24 21:13:45 【问题描述】:

我有一个“sSamples”表,其中包含 UniqueID、sDate 和 sID-s,例如:

我需要最新 sDate 的 SID-s,并按 UniqueID 分组。

结果应如下所示:

UniqueID  |  SID
---------------------
031311579 | 11641325
053600109 | 11641353
066051428 | 11641379
093468114 | 11641350

我尝试了不同的查询版本,但性能非常慢。最好的解决方案是什么?

感谢您的回答!

【问题讨论】:

***.com/q/121387/1509264 或 ***.com/q/3491329/1509264 或 ***.com/q/16529701/1509264 或 ***.com/q/10342405/1509264(或许多其他)的重复。 【参考方案1】:

您没有发布您的版本(这样我们就不会重新发布您已经尝试过的版本)。无论如何,如果您没有尝试分析函数,以下是方法(来自第 1 - 5 行的样本数据;您可能想尝试的查询从第 6 行开始):

SQL> with ssamples (uniqueid, sdate, sid) as
  2    (select '031311579', to_date('18.01.2021 08:18', 'dd.mm.yyyy hh24:mi'), 11641325 from dual union all
  3     select '066051428', to_date('20.01.2021 07:50', 'dd.mm.yyyy hh24:mi'), 11641381 from dual union all
  4     select '066051428', to_date('20.01.2021 07:51', 'dd.mm.yyyy hh24:mi'), 11641379 from dual
  5    )
  6  select uniqueid, sid
  7  from (select uniqueid, sdate, sid, row_number() over (partition by uniqueid order by sdate desc) rn
  8        from ssamples
  9       )
 10  where rn = 1;

UNIQUEID         SID
--------- ----------
031311579   11641325
066051428   11641379

SQL>

【讨论】:

【参考方案2】:

查看预期输出,看来您可以使用maxkeep 子句,如下所示

Select uniqueid, max(sid) keep (dense_rank last order by sdate) as sid
 From your_table
Group by uniqueid

【讨论】:

以上是关于查找没有子查询的最大 sID [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL:对 CASE WHEN 重复使用子查询,而无需重复子查询

索引视图在没有 INNER JOIN 或子查询的情况下查找空引用

使用子查询更新在雪花中不起作用

避免用于派生选择中的列的多个重复子查询

没有聚合或子查询的查询

更新语句给子查询错误的结果[重复]