Как мне написать запрос, чтобы вернуть указанное количество строк с различными значениями для определенного столбца? - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу написать запрос для получения 'n' строк с разными значениями для столбца PERSON_ID?

SELECT  
        HDR.PERSON_ID, DTL.DETAIL_ID
FROM 
        HEADER HDR, DETAIL DTL 
WHERE 
        HDR.HEADER_ID = DTL.HEADER_ID
    AND DTL.CODE = 'SUCCESS'
ORDER BY 
    HDR.PERSON_ID

enter image description here

Если я получу первые 5, запрос вернет строки с 1 по 5. Вместо этого я хочу вернуть строки с 1 по 7 - это даст мне строки из 5 человек.

Ответы [ 2 ]

3 голосов
/ 08 ноября 2019

Вы можете использовать DENSE_RANK(), чтобы ответить на ваш вопрос. Что еще более важно, вы можете научиться использовать правильный, явный, стандартный JOIN синтаксис.

SELECT pd.PERSON_ID, pd.DETAIL_ID
FROM (SELECT HDR.PERSON_ID, DTL.DETAIL_ID,
             DENSE_RANK() OVER (ORDER BY HDR.PERSON_ID) as ranking
      FROM HEADER HDR JOIN
           DETAIL DTL 
           ON HDR.HEADER_ID = DTL.HEADER_ID AND DTL.CODE = 'SUCCESS'
     ) pd
WHERE ranking <= 5;
0 голосов
/ 08 ноября 2019

Вы можете попробовать внутреннее соединение с отличным PERSON_ID

  SELECT  HDR.PERSON_ID, DTL.DETAIL_ID
  FROM  HEADER HDR
  INNER JOIN  DETAIL DTL  ON HDR.HEADER_ID = DTL.HEADER_ID
      AND DTL.CODE = 'SUCCESS'
  INNER JOIN  (

    SELECT DISTINCT  HDR.PERSON_ID
    FROM  HEADER HDR
    INNER JOIN  DETAIL DTL  ON  HDR.HEADER_ID = DTL.HEADER_ID
      AND DTL.CODE = 'SUCCESS'
    ORDER BY   HDR.PERSON_ID

    ) T ON T.PERSON_ID = HDR.PERSON_ID
  ORDER BY   HDR.PERSON_ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...