2016-09-24 10 views
-1

의 출력에서 ​​첫 번째 결과를 선택합니다. oracle의 하위 쿼리에서 첫 번째 결과와 마지막 결과를 선택하려고합니다. "rownum"시퀀스를 완전히 변경하는 "order by"를 사용하기 때문에 "rownum"을 사용할 수 없습니다.
pls는 몇 가지 해결책을 제안합니다. 고맙습니다. fr 도움말.하위 쿼리

답변

0

첫 번째 값과 마지막 값을 모두 원하기 때문에 "rownum"을 사용할 수 없습니다. 그렇지 않으면 코드를 하위 쿼리에 넣고 선택하고 외부 쿼리에서 rownum으로 필터링하여 rownum을 사용할 수 있습니다. 그대로, ROW_NUMBER() 분석 함수 등을 사용해야합니다 (첫 번째와 마지막 결과를 하나의 단일 외부 쿼리로 얻을 수 있도록 ... 및 desc ... by order와 함께 ...)

동점이 가능한 경우 DENSE_RANK를 사용하면 첫 번째 (또는 마지막) 행을 연결하는 대신 ROW_NUMBER()가 첫 번째 (또는 마지막) 행을 연결하는 행 중 하나 "특히" , 무작위

당신은, 예를 참조하여 문제에 대한 샘플 데이터를 제공하려면

당신이 집계 쿼리가있는 경우

은 그게 위해 설계 무엇
+0

예 OVER와 함께 ROW_NUMBER()를 사용했는데 효과가있었습니다. thnx – user4036695

0

사용 keep입니다 그것은 다음과 같은 형태.... :

select t.*, 
     first_value(outcome) over (partition by x order by datetime) as first_outcome, 
     last_value(outcome) over (partition by x order by datetime) as last_outcome 
from t; 
0

난 (...로 순서)로 OVER ROW_NUMBER() 함수를 사용하여이를 해결 :
select x, 
     max(outcome) keep (dense_rank first order by datetime asc) as first_outcome, 
     max(outcome) keep (dense_rank first order by datetime desc) as last_outcome, 
from t 
group by x; 
사용 first_value()

last_value()과는 응집이없는 경우.