, 당신은 가장 높은 날짜 (동일한 날짜에 더 기록이있는 경우 임의의 하나) 중 하나에 ID 당 레코드를 얻으려고하거나 NULL 날짜가 (다시 임의 일 경우 더 같은 ID를 가진 NULL 기록은 존재한다.
그래서이 데이터
ID EDIT_DATE TEXT
---------- ------------------- ----
1 01.01.2015 00:00:00 A
1 01.01.2016 00:00:00 B
1 01.01.2016 00:00:00 C
2 01.01.2015 00:00:00 D
2 01.01.2016 00:00:00 E
2 F
2 G
당신이 기대하는 가정 중 B 또는 ID = 1 C 및 ID = 2
할이 쿼리에 대한 F 또는 G 중 그것. 모든 선행 열이 같은 경우 임의의 결과를 얻을 수 ...
with dta as (
select 1 id, to_date('01012015','ddmmyyyy') edit_date, 'A' text from dual union all
select 1 id, to_date('01012016','ddmmyyyy') edit_date, 'B' text from dual union all
select 1 id, to_date('01012016','ddmmyyyy') edit_date, 'C' text from dual union all
select 2 id, to_date('01012015','ddmmyyyy') edit_date, 'D' text from dual union all
select 2 id, to_date('01012016','ddmmyyyy') edit_date, 'E' text from dual union all
select 2 id, NULL edit_date, 'F' text from dual union all
select 2 id, NULL edit_date, 'G' text from dual),
dta2 as (
select ID, EDIT_DATE, TEXT,
row_number() over (partition by ID order by edit_date DESC NULLS first, DBMS_RANDOM.VALUE) as rn
from dta)
select *
from dta2 where rn = 1
order by id
;
ID EDIT_DATE TEXT RN
---------- ------------------- ---- ----------
1 01.01.2016 00:00:00 B 1
2 F 1
희망 당신은 할 수 재사용 - 사용 기능은 마지막 순서 열 같은 임의의 값을 추가 FIRST NULLS와 와 순서입니다 당신이 조금 다른 결과가 필요하다면 아이디어. ...
사례 식은 하나의 값을 반환합니다. 코드의 조건부 실행에는 사용되지 않습니다. – jarlh
@jarlh - 어디에서나 "조건부 실행"이 보이지 않습니다. 단지'order by' 절에 사용 된'case' 표현식을 보았습니다. 그것은 유효한 사용법입니다. – mathguy
@mathguy, \t OP와 마찬가지로 보이지만 DBMS_RANDOM.VALUE (c.edit_date = 'null'인 경우)로 정렬하거나 DBMS_RANDOM.VALUE, c.edit_date desc로 정렬하려고합니다. 나는. 한 가지로든 다른 것으로든 어떤 종류의 조건부 실행. – jarlh