我有一个问题的查询
select b.* from
(select key, max(val) as val from (somequery) group by key) as a
inner join
(somequery) as b
on a.key = b.key and a.val = b.val
order by key
Run Code Online (Sandbox Code Playgroud)
而且我想知道是否有一种显而易见的方式(我错过了)来简化它(假设某些查询可能相当长).
任何想法将不胜感激.
有,但肯定不明显:
select
*
from
(
select
key,
val,
col,
max(val) over (partition by key) as MaxVal
from
tableA
)
where
val = MaxVal
Run Code Online (Sandbox Code Playgroud)
使用over子句是执行此操作的好方法,并且不需要任何无关的子查询。它所做的就是获取每个键的最大值val,然后将该结果集包装在子查询中,我们可以在子查询中检查val以MaxVal确保我们提取正确的行。
比执行最多三个子查询更干净、更快!
| 归档时间: |
|
| 查看次数: |
526 次 |
| 最近记录: |