programing

Oracle에서 상위 100개 행을 선택하는 방법

subpage 2023. 2. 23. 22:48
반응형

Oracle에서 상위 100개 행을 선택하는 방법

제가 요구하는 것은 각 고객의 최신 주문을 받아 상위 100개의 레코드를 획득하는 것입니다.

각 클라이언트에 대한 최신 주문을 받기 위해 아래와 같이 한 가지 질문을 작성했습니다.내부 쿼리는 정상적으로 동작합니다.근데 어떻게 하면 100점 만점을 받을 수 있을지 모르겠어요.

    SELECT * FROM (
      SELECT id, client_id, ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn 
      FROM order
    ) WHERE rn=1

좋은 생각 있어요?감사해요.

create_time에 주문 작성 시간이 포함되어 있고 최신 주문과 함께 100개의 클라이언트를 원하는 경우 다음을 수행할 수 있습니다.

  • 가장 안쪽 쿼리에 create_time 추가
  • 외부 쿼리 결과를 다음 순서로 정렬합니다.create_time desc
  • 를 사용하여 처음 100 행을 필터링하는 가장 바깥쪽 쿼리를 추가합니다.ROWNUM

쿼리:

  SELECT * FROM (
     SELECT * FROM (
        SELECT 
          id, 
          client_id, 
          create_time,
          ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn 
        FROM order
      ) 
      WHERE rn=1
      ORDER BY create_time desc
  ) WHERE rownum <= 100

Oracle 12c 업데이트

릴리스 12.1에서 Oracle은 "실제" Top-N 쿼리를 도입했습니다.새로운 기능 사용FETCH FIRST...구문은 다음 항목도 사용할 수 있습니다.

  SELECT * FROM (
    SELECT 
      id, 
      client_id, 
      create_time,
      ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn 
    FROM order
  ) 
  WHERE rn = 1
  ORDER BY create_time desc
  FETCH FIRST 100 ROWS ONLY)

당신은 당신이 원하는 것을 하기 위해 오라클에서 로넘을 사용해야 한다.

where rownum <= 100

다음 답변도 참조해 주십시오.

오라클 한계

오라클에서 상위 선택

oracle 2에서 상위 선택

Moneer Kamal이 말했듯이, 당신은 그것을 간단하게 할 수 있습니다.

SELECT id, client_id FROM order 
WHERE rownum <= 100
ORDER BY create_time DESC;

100 행을 취득한 후에 오더가 완료되는 것에 주의해 주세요.이것은 주문을 원하지 않는 사용자에게 유용할 수 있습니다.

업데이트:

rownum을 사용하여 주문을 사용하려면 다음과 같이 입력해야 합니다.

SELECT * from (SELECT id, client_id FROM order ORDER BY create_time DESC) WHERE rownum <= 100;

DB에 처음 삽입된 10명의 고객(테이블 고객):

select * from customers where customer_id <=
(select  min(customer_id)+10 from customers)

Last 10 customers inserted into db (table customers):

select * from customers where customer_id >=
(select  max(customer_id)-10 from customers)

이게 도움이 됐으면 좋겠는데...

최근에 업데이트된 상위 n개 행을 선택하려면

SELECT * 
FROM (
   SELECT * 
   FROM table 
   ORDER BY UpdateDateTime DESC
)
WHERE ROWNUM < 101;

이것을 시험해 보세요.

   SELECT *
FROM (SELECT * FROM (
    SELECT 
      id, 
      client_id, 
      create_time,
      ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn 
    FROM order
  ) 
  WHERE rn=1
  ORDER BY create_time desc) alias_name
WHERE rownum <= 100
ORDER BY rownum;

또는 TOP:

SELECT TOP 2 * FROM Customers; //But not supported in Oracle

메모: 내부 쿼리는 정상입니다.당신의 출력물을 공유해 주세요.

언급URL : https://stackoverflow.com/questions/27034585/how-to-select-top-100-rows-in-oracle

반응형