반응형
Oracle SQL에서 날짜별로 정렬된 상위 1개를 선택하는 방법은 무엇입니까?
select * from table_name where rownum = 1
날짜순으로 내림차순으로 정렬하는 방법:
select * from table_name order by trans_date desc
하지만 그들은 함께 일하지 않습니다 (rownum에 따라 생성되지 않습니다.trans_date):
... where rownum = 1 order by trans_date desc
문제는 날짜별로 주문한 상위 1개를 어떻게 선택하느냐는 것입니다.
... where rownum = 1 order by trans_date desc
이렇게 하면 임의로 선택한 레코드가 하나 선택됩니다.where rownum = 1) 그런 다음 이 레코드 하나를 정렬합니다(order by trans_date desc).
Ivan이 보여준 것처럼 하위 쿼리를 사용하여 레코드를 주문한 다음 첫 번째 레코드를 보관할 수 있습니다.where rownum = 1외부 질문에그러나 이는 Oracle에 매우 특정하며 하위 쿼리 결과가 순서가 지정되지 않은 것으로 간주되는 SQL 표준을 위반합니다(즉, 절별 순서는 DBMS에서 무시할 수 있음).
따라서 표준 솔루션을 사용하는 것이 좋습니다.오라클 12c 기준:
select *
from table_name
order by trans_date desc
fetch first 1 row only;
이전 버전의 경우:
select *
from
(
select t.*, row_number() over (order by trans_date desc) as rn
from table_name t
)
where rn = 1;
최신 Oracle 버전은 다음과 같습니다.FETCH FIRST:
select * from table_name order by trans_date desc
fetch first 1 row only
하위 쿼리가 있어야 조합이rownum & order작동 가능:
select * from (select * from table_name order by trans_date desc) AS tb where rownum = 1
이에 대해 창 기능을 사용할 수 있습니다.
select t.*
from (
select *,
min(trans_date) over () as min_date,
max(trans_date) over () as max_date
from the_table
) t
where trans_date = min_date
or trans_date = max_date;
또 다른 옵션은 파생된 테이블에 가입하는 것입니다.
select t1.*
from the_table
join (
select min(trans_date) over () as min_date,
max(trans_date) over () as max_date
from the_table
) t2 on t1.trans_date = t2.min_date
or t1.trans_date = t2.max_date;
어떤 것이 더 빠를지 확실하지 않습니다. 실행 계획을 확인해야 합니다.
언급URL : https://stackoverflow.com/questions/44430702/how-to-select-top-1-and-ordered-by-date-in-oracle-sql
반응형
'programing' 카테고리의 다른 글
| Oracle.DataAccess.클라이언트 종속성 (0) | 2023.07.21 |
|---|---|
| maven-shade-plugin - 클래스 org.apache.maven에서 'resource'를 찾을 수 없습니다.플러그인그늘진 곳매니페스트 리소스 변환기 (0) | 2023.07.21 |
| 스프링 부팅으로 자리 표시자 응용 프로그램을 확인할 수 없습니다.yml (0) | 2023.07.21 |
| frozen=True일 때 __post_init__에서 데이터 클래스 필드의 값을 설정하는 방법은 무엇입니까? (0) | 2023.07.21 |
| MySQL에 패키지(Oracle)에 해당하는 것이 있습니까? (0) | 2023.07.21 |