lam*_*arz 2 sql oracle max oracle10g groupwise-maximum
我正在使用Oracle 10g.我在
SQL上的 研究- 如何选择具有最大值列的行
和
http://jan.kneschke.de/projects/mysql/groupwise-max/
解决如何处理max(行)然后找到其他max(行)但是,我还没有.
标准: ID最大值(enroll_date)的代码必须为"WHEAT".
我不希望代码为"WHEAT"的最长注册日期.只有当代码为最大注册日期的"WHEAT"时,我才想要该行.
问题:如何编写查询以满足条件?
这不起作用,因为它返回ID = 30,Code = WHEAT,其中Date 12/25/2001不是该ID的最大值(日期).
select ID, code, max(enroll_date)
from enrollment
where CODE = 'WHEAT'
group by ID, code
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为它也返回ID = 30,Code = WHEAT,其中date = 12/25/2001.
select ID, code, max(enroll_date)
from enrollment
group by ID, code
having code='WHEAT'
Run Code Online (Sandbox Code Playgroud)
这是我的桌子
ENROLLMENT
===========================
ID CODE ENROLL_DATE
--------------------------
01 WHEAT <NULL>
01 WHEAT 12/21/2007
01 WHEAT 7/30/2009
30 WHEAT 12/25/2001
30 CHAFF 6/14/2010
72 WHEAT 8/20/2002
72 WHEAT 12/7/2007
DESIRED RESULT
ID CODE ENROLL_DATE
================================
01 WHEAT 7/30/2009
72 WHEAT 12/7/2007
Run Code Online (Sandbox Code Playgroud)
这听起来像你想要的东西
SELECT id,
code,
enroll_date
FROM (SELECT id,
code,
enroll_date,
rank() over (partition by id
order by enroll_date desc nulls last) rnk
FROM enrollment)
WHERE rnk = 1
AND code = 'WHEAT'
Run Code Online (Sandbox Code Playgroud)
解析函数RANK分配的最新ENROLL_DATE特定ID值1,下一个最近的ENROLL_DATE为ID2的值,等等,那么你可以参考排名,并在外部查询的代码.如果可能存在重复项,您可能更愿意使用DENSE_RANK或ROW_NUMBER解析函数
您也可以编写查询
SELECT id,
code,
enroll_date
FROM (SELECT id,
code,
enroll_date,
max(enroll_date) over (partition by id) max_enroll_date
FROM enrollment)
WHERE enroll_date = max_enroll_date
AND code = 'WHEAT'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2436 次 |
| 最近记录: |