首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择Oracle中值最大的记录

选择Oracle中值最大的记录
EN

Stack Overflow用户
提问于 2014-03-14 14:34:24
回答 3查看 1.2K关注 0票数 0

我被一个查询困住了,其中一个表有许多相同id的记录,并且列有不同的值,如下所示:

代码语言:javascript
复制
ID  Name Location  Daysdue  date
001 MINE NBI       120      13-FEB-2013
001 TEST MSA       111      14-FEB-2013
002 MINE NBI       13       13-FEB-2013
002 MINE MSA       104      15-FEB-2013

我想返回一个最高日期到期的记录,所以我写了一个查询:

代码语言:javascript
复制
select id,max(daysdue),name,location,date group by id,name,location,date;

此查询不是为每个id返回一条记录,而是为每个id返回几条记录,因为我已经与每一列进行了分组,每个列都是不同的。选择基于id的最大天数行的最佳方法是什么,而不管其他列中的其他值如何?

例如,我希望将其返回为:

代码语言:javascript
复制
001 MINE NBI       120      13-FEB-2013
002 MINE MSA       104      15-FEB-2013
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-14 14:38:06

似乎你想要的东西

代码语言:javascript
复制
SELECT *
  FROM (SELECT t.*,
               rank() over (partition by id
                                order by daysDue desc) rnk
          FROM table_name t)
 WHERE rnk = 1

根据您希望如何处理领带(具有相同id和相同daysDue的两行),您可能希望使用dense_rankrow_number函数,而不是rank

票数 4
EN

Stack Overflow用户

发布于 2014-03-14 14:37:40

首先,您需要为每个MAX(daysdue)找到ID

代码语言:javascript
复制
SELECT
    ID,
    MAX(daysdue) AS max_daysdue
FROM table
GROUP BY ID;

然后你就可以加入你原来的桌子了。

代码语言:javascript
复制
SELECT t.* 
FROM
    table t
    JOIN (
        SELECT
            ID,
            MAX(daysdue) AS max_daysdue
        FROM table
        GROUP BY ID
    ) m ON
        t.ID = m.ID
        AND t.daysdue = m.max_daysdue;

请注意,在匹配的情况下,您可能有重复的id --我想在语义上是有意义的。

票数 0
EN

Stack Overflow用户

发布于 2014-03-14 14:38:16

代码语言:javascript
复制
SELECT 
  id,daysdue,name,location,date 
FROM your_table 
  WHERE daysdue = (
    SELECT max(daysdue) FROM your_table
  );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22407975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档