2013-12-18 2 views
0

에서 선택오라클은 : 여기 내 오라클 (11g) 테이블의 셀렉트

-------------------------- 
|MyTable     | 
-------------------------- 
|UserID |Date   | 
-------------------------- 
|1   |4/29/2011 | 
|1   |6/13/2013 | 
|2   |5/3/2001 | 
|2   |2/3/2011 | 
|3   |12/3/2009 | 
|3   |4/3/2011 | 
-------------------------- 

나는 다음과 같은 SQL 수행하는 경우 :

SELECT MAX(Date) AS upd_dt, UserID 
FROM MyTable 
GROUP BY upd_dt, UserID 

를 내가 얻을 :

-------------------------- 
|User ID |Date  | 
-------------------------- 
|1   |6/13/2013 | 
|2   |2/3/2011 | 
|3   |4/3/2011 | 
-------------------------- 

어떤 I 알다. 이제이 결과에 대해 SELECT를 수행하고 가장 최근의 날짜와 해당 userID가있는 행을 가져 오려고합니다. SELECT에서 SELECT하는 방법이 있습니까? 다음과 같음 :

SELECT MAX(upd_dt) AS maxdt, UserID 
FROM ( 
     SELECT MAX(Date) AS upd_dt, UserID 
     FROM MyTable 
     GROUP BY upd_dt, UserID 
    ) 

GROUP BY maxdt, UserID 
+0

왜 'rownum = 1 order by upd_dt desc'를 사용하지 않으시겠습니까 ?? – jcho360

+0

@ jcho360 하위 쿼리 없이는 작동하지 않습니다. – gpeche

+0

하위 쿼리에서 확인하지는 않겠습니다. – jcho360

답변

1

를 날짜 내림차순으로 주문 선택합니다. 그리고 난 당신이 집계 할 필요가 없습니다 생각 : 당신이 내부 쿼리에서 ORDER BY을 넣어 다음 외부 쿼리 ROWUM으로 필터링해야

SELECT * 
FROM (  
    SELECT Date, UserID 
    FROM MyTable 
    ORDER BY Date dESC 
) 
WHERE ROWNUM < 2; 

참고. 그렇지 않으면 당신이하고있는 일은 SELECT 첫 번째로 검색된 행 (둘 중 어느 것이 든 가능)이고 그 다음에 ORDER 그 한 행입니다. 참고 또한 ROWNUM 일반 하지 일에 당신은 당신이 필터링 제한 할 않는 한 기대로보다 작음 (<)

0

당신도 그럴 필요가 있습니까?

SELECT MAX(Date) AS upd_dt, UserID 
FROM MyTable 
GROUP BY UserID 

를 두 번째 쿼리의 경우, 그래 당신은 하위 쿼리를 사용할 수 있습니다 : 그냥 내가 첫 번째 쿼리가 더 좋아해야한다고 말할 것 위에 사용자 ID를

select * from (select upd_dt, UserID from MyTable order by upd_dt desc) where rownum < 2 
+0

'rownum'은 주문하기 전에 할당되므로 하위 쿼리가 있어야합니다. –

1

당신이 부질없이 할 수 있다고 생각 :

SELECT MAX(Date) AS upd_dt, 
     MAX(UserID) keep(dense_rank last order by Date) as UserID 
    FROM MyTable; 

이 부분을 명확히하려면 : MAX(UserID). 동일한 최대 값이 Date이고 다른 값이 UserID 인 두 개의 행을 고려하십시오.

-------------------------- 
|MyTable     | 
-------------------------- 
|UserID  Date  | 
-------------------------- 
|1   |6/13/2013 | 
|2   |6/13/2013 | 
-------------------------- 

그래서 어느 것을 골라야할지 결정해야합니다. 해당 합계가 MAX(UserID)이거나 MIN(UserID) 일 경우 결과가 다를 수 있습니다.