我在用甲骨文10g。我的研究
SQL - How to select a row having a column with max value
和
http://jan.kneschke.de/projects/mysql/groupwise-max/
请说明如何处理max(行),然后找到其他max(行),但是,我还没有到那里。
标准:ID最大值(Enroll_date)的代码必须是“小麦”。
我不想要最大的登记日期,其中的代码是‘小麦’。我想要行只有当代码是‘麦子’的最大登记日期。
问题:如何编写符合条件的查询?
这不起作用,因为它返回ID=30,Code =max,其中的日期为12/25/2001,它不是该ID的最大值(日期)。
select ID, code, max(enroll_date)
from enrollment
where CODE = 'WHEAT'
group by ID, code这也不起作用,因为它也返回ID=30,Code = WHEAT,其中date = 12/25/2001。
select ID, code, max(enroll_date)
from enrollment
group by ID, code
having code='WHEAT'这是我的桌子
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发布于 2011-06-22 23:48:02
这个简单的查询产生所需的结果。
select * from t where enrolldate=
(select max(enrolldate) from t as t1
where t.id=t1.id)
and t.code='WHEAT'发布于 2011-06-22 22:03:47
听起来你想要的是
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'解析函数RANK为特定ID分配一个值为1的最新ENROLL_DATE,为该ID分配一个值为2的最近一次ENROLL_DATE,然后您可以引用外部查询中的秩和代码。如果可以重复,您可能更喜欢使用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'发布于 2011-06-22 21:48:16
请在Oracle文档中查找“分析函数”--这是您想要做的事情。
基本上,它允许您对从查询中返回的记录进行分组排序,但仍然允许您访问该行中的所有列--您只想检查enroll_date排序的组中的第一行是否有'WHEAT‘的代码。
https://stackoverflow.com/questions/6446889
复制相似问题