首页 > 解决方案 > sql - 在订单上选择多个最大值

问题描述

我有date, work,Tasks在一张桌子上。每个date我们有多个条目,每个条目一个Task。在给定的一天,如果有 3 个任务,我们将有 3 个条目

我想为每项工作完成最新任务。下面的查询给了我所有

SELECT task
FROM TEST_RESULTS 
WHERE RESULT ='PASSED' and
      task NOT IN (' ', 'N/A' )
ORDER BY work, date DESC  ;

我只能得到排序的列表。有人可以帮我获取每项工作最新日期的行。

需要的样本输出:

+ -----+--------+------------+
| 工作 | 任务 | 日期 |
+ -----+--------+------------+
| 1 | 干净 | 2018 年 1 月 1 日 |
| 1 | 刷| 2018 年 1 月 1 日 |
| 2 | 洗| 2018 年 1 月 2 日 |
| 2 | 干净 | 2018 年 1 月 2 日 |
| 3 | xyz | 2018 年 1 月 1 日 |
| 3 | 抄送 | 2018 年 1 月 1 日 |
+ -----+--------+------------+

标签: sqloracleoracle12c

解决方案


使用row_numner()解析函数

select work,date
    from 
    (
    select work,date,row_number()over(partition by work order by date desc ) rn
    from  TEST_RESULTS 
    WHERE RESULT ='PASSED' and task NOT IN (' ','N/A' )
    ) a where a.rn=1

如果您只需要所有任务的最新日期,请使用简单的子查询

with cte as 

(
select * ,max(date) over(partition by work) as mxdate
from TEST_RESULTS
where RESULT ='PASSED' and task NOT IN (' ','N/A' )
)  select * from cte where  
   date=mxdate

推荐阅读