根据特定条件选择最大值

时间:2014-09-25 03:22:29

标签: sql oracle

当前表:

id | type | term | sysdate | e_date | t_date  |
---+------+------+---------+--------+---------+
 3 | ugrd | 1220 | 9/10/14 | 9/1/11 | 9/15/11 |
 3 | ugrd | 1240 | 9/10/14 | 9/1/12 | 9/15/12 |
 3 | grad | 1250 | 9/10/14 | 3/6/13 | 3/20/13 |*
 3 | grad | 1380 | 9/10/14 | 9/1/14 | 9/15/14 |

sysdate =今天的日期(此示例为8/20)

我希望能够查询max(term) where sysdate < t_date

使用此逻辑,应返回此行*:

 3 | grad | 1250

现在我的sql看起来像这样:

select distinct cs.id, s.type, max(cs.term)
           from tb_current_students cs 
          where sysdate < cs.t_date

显然这不起作用,这就是我来找你的原因。我尝试了一个子查询,但也失败了。希望我提供了足够的信息,如果没有评论,我会给你更多。

2 个答案:

答案 0 :(得分:2)

使用join查询下面应该可以帮助您

SELECT A.ID, A.TYPE, A.TERM FROM
tb_current_students  A JOIN
(
    SELECT MAX(TERM) MAX_TERM FROM  tb_current_students  
    WHERE TRUNC (T_DATE) < TRUNC (SYSDATE)
) B
ON A.TERM = B.MAX_TERM;

答案 1 :(得分:1)

一种简单的方法是为已经过去的所有日期获取行,然后按顺序降序并获取第一行;

SELECT id, type, term FROM (
  SELECT * FROM tb_current_students A
  WHERE t_date < SYSDATE
  ORDER BY term DESC
)
WHERE ROWNUM <= 1

A simple SQLfiddle to test with