중복 항목에서 가장 낮은 행만 검색 [duplicate]

Nov 30 2020

여기에 다음과 같은 데이터가 포함 된 테이블이 있습니다.

   Location    No   Days
   ----------------------
      Callao    1    7
      Callao    2    7
      CHENNAI   3    6
      SINGAPORE 4   30
      SINGAPORE 5    7
      SINGAPORE 6    7
    LOS ANGELES 7    9
   HONG KONG    7   11
   HONG KONG    7    6
 LOS ANGELES    8    6
   HONG KONG    9    6
   HONG KONG    9    4
 LOS ANGELES    9   10
 LOS ANGELES    9    9
 LOS ANGELES    10   6

이제 여기에서는 가장 낮은 일 수가있는 행만 원합니다.

나는 이것을 원한다.

   Location    No   Days
   ---------------------
      Callao    1    7
      Callao    2    7
     CHENNAI    3    6
    SINGAPORE   4   30
   SINGAPORE    5    7
   SINGAPORE    6    7
   HONG KONG    7    6
 LOS ANGELES    8    6
   HONG KONG    9    4
 LOS ANGELES    10   6

가장 높은 값을 기준으로 중복 번호 만 제거하고 싶습니다. 이미 많은 것을 직접 시도했지만 아무것도 작동하지 않습니다.

미리 감사드립니다.

답변

marcothesane Nov 30 2020 at 09:49
WITH
-- your input, thanks for pasting it in ..
indata(location,no,days) AS (
          SELECT 'Callao',1,7
UNION ALL SELECT 'Callao',2,7
UNION ALL SELECT 'CHENNAI',3,6
UNION ALL SELECT 'SINGAPORE',4,30
UNION ALL SELECT 'SINGAPORE',5,7
UNION ALL SELECT 'SINGAPORE',6,7
UNION ALL SELECT 'LOS ANGELES',7,9
UNION ALL SELECT 'HONG KONG',7,11
UNION ALL SELECT 'HONG KONG',7,6
UNION ALL SELECT 'LOS ANGELES',8,6
UNION ALL SELECT 'HONG KONG',9,6
UNION ALL SELECT 'HONG KONG',9,4
UNION ALL SELECT 'LOS ANGELES',9,10
UNION ALL SELECT 'LOS ANGELES',9,9
UNION ALL SELECT 'LOS ANGELES',10,6
)
-- real query starts here, replace "," with "WITH" ..
,
w_filter AS (
  SELECT
    *
  , ROW_NUMBER() OVER(PARTITION BY no ORDER BY days) AS fil
  FROM indata
)
SELECT
  location
, no
, days
FROM w_filter
WHERE fil=1
ORDER BY 2 ;
-- out   location   | no | days 
-- out -------------+----+------
-- out  Callao      |  1 |    7
-- out  Callao      |  2 |    7
-- out  CHENNAI     |  3 |    6
-- out  SINGAPORE   |  4 |   30
-- out  SINGAPORE   |  5 |    7
-- out  SINGAPORE   |  6 |    7
-- out  HONG KONG   |  7 |    6
-- out  LOS ANGELES |  8 |    6
-- out  HONG KONG   |  9 |    4
-- out  LOS ANGELES | 10 |    6