2014-09-25 63 views
0

當前表:一定的標準選擇最大

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

下面的查詢使用連接應該幫助你

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

一個簡單的方法是獲取已經通過的所有日期的行,然後降序排列並獲取第一行;

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

+0

這很接近,但並不能確保我們獲得最大期限,這是要求的一部分。我認爲你的意思是按照術語排序而不是t_date,那麼它應該是好的。 – 2014-09-25 04:36:16

+1

@MajorMajor是的,當然,謝謝。在第一天早晨喝咖啡之前回答SQL問題應該有一個阻止:) – 2014-09-25 04:38:52