繁体   English   中英

查询:按一列分组并选择其他列

[英]Query : Group By one column and select antoher column

我查询有问题

我应该进行查询以获取最后一个状态(因此检查日期),对称为列mat_calc的分组。

mat_calc | STATE | DATE

1 | NEW | 25/03/2016

1 | DONE |25/01/2016

2 |PROC |25/04/2016

2 |PROC |25/07/2016

2 |DONE |25/09/2016

3 |NEW |25/01/2016

3 |PROC |25/06/2016

3 |DONE |25/02/2016

3 |OK |25/12/2016

4 |OK |25/03/2016

所以我应该还给它:

mat_cal及其状态

1 | NEW

2 | DONE

3 | OK

4 | OK

我的查询是

select mat_cal AS mat_cal , STATO AS STATO, MAX(DATA) AS DATA
from CALC
group by mat_cal ;

我在使用组ID时遇到麻烦,因为它看起来好像我不使用它。

我该怎么做? 谢谢

抱歉,我无法创建有堆栈溢出的表

使用row_number()

select c.*
from (select c.*,
             row_number() over (partition by mat_cal order by data desc) as seqnum
      from calc c
     ) c
where seqnum = 1;

使用Group By子句时,需要对所有选定的列进行操作。 如果您不这样做,则会得到ORA-00979异常。

尝试将STATO列添加到Group By

   select mat_cal AS mat_cal , STATO AS STATO, MAX(DATA) AS DATA
    from CALC
    group by mat_cal, STATO ;

您可以尝试以下操作:

--creating the data you publishied
 with calc (mat_cal,STATO,date)
 as 
 (
 select '1' as mat_cal,'NEW' as STATO,'25/03/2016' as date
 union
 select '1','DONE','25/01/2016'
 union
 select '2','PROC','25/04/2016'
 union
 select '2','PROC','25/07/2016'
 union 
 select '2','DONE','25/09/2016'
 union 
 select '3','NEW','25/01/2016'
 union 
 select '3','PROC','25/06/2016'
 union 
 select '3','DONE','25/02/2016'
 union 
 select '3','OK','25/12/2016'
 union 
 select '4','OK','25/03/2016')


--the query to solve the problem 
select mat_cal , STATO ,date
from CALC as c
where c.date = (select max(date) from calc as c2 where c.mat_cal = c2.mat_cal group by c2.mat_cal)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM