Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL选择其中行=每个主键的最大值Oracle SQL Developer_Sql_Oracle_Aggregate Functions_Greatest N Per Group - Fatal编程技术网

SQL选择其中行=每个主键的最大值Oracle SQL Developer

SQL选择其中行=每个主键的最大值Oracle SQL Developer,sql,oracle,aggregate-functions,greatest-n-per-group,Sql,Oracle,Aggregate Functions,Greatest N Per Group,如何在此示例中仅选择每个用户的最高行: 产量将是特德、梨和比尔、橘子 如果账单中添加了新行,将来,(第5行)我希望使用相同的查询来拉取第5行通信。如果只需要用户和通信,请使用保留: select usr, max(communication) keep(dense_rank first order by line desc) as communication from mytable group by usr 如果需要整行,则窗口函数更合适: select * from (

如何在此示例中仅选择每个用户的最高行:

产量将是特德、梨和比尔、橘子


如果账单中添加了新行,将来,(第5行)我希望使用相同的查询来拉取第5行通信。

如果只需要用户和通信,请使用
保留

select usr, 
    max(communication) keep(dense_rank first order by line desc) as communication
from mytable
group by usr
如果需要整行,则窗口函数更合适:

select *
from (
    select t.*, row_number() over(partition by usr order by line desc) rn
    from mytable t
) t
where rn = 1

旁注:
user
是一个保留字,因此列名称的选择很差。我在查询中使用了
usr

如果您只需要用户和通信,请使用
保留

select usr, 
    max(communication) keep(dense_rank first order by line desc) as communication
from mytable
group by usr
如果需要整行,则窗口函数更合适:

select *
from (
    select t.*, row_number() over(partition by usr order by line desc) rn
    from mytable t
) t
where rn = 1

旁注:
user
是一个保留字,因此列名称的选择很差。我在查询中使用了
usr

您的表中有一列,因此您可以使用max分析函数,或者不存在,如下所示:

使用
sum
分析函数:

Select * from
(Select t.*, max(line) over (partition by user) as mxline
  From your_table t)
Where line = mxline
使用
不存在

Select * from your_table t
Where not exists 
(Select 1 from your_table tt
Where t.user = tt.user
And tt.line > t.line)

表中有一列,因此可以使用max分析函数,也可以不使用,如下所示:

使用
sum
分析函数:

Select * from
(Select t.*, max(line) over (partition by user) as mxline
  From your_table t)
Where line = mxline
使用
不存在

Select * from your_table t
Where not exists 
(Select 1 from your_table tt
Where t.user = tt.user
And tt.line > t.line)

欢迎@TEE2SKI。如果我的回答回答了你的问题,那么点击复选标记。。。谢谢。欢迎@TEE2SKI。如果我的回答回答了你的问题,那么点击复选标记。。。谢谢