Recupere apenas a linha mais baixa das duplicatas [duplicado]

Nov 30 2020

Aqui eu tenho a tabela que contém dados como este:

   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

Aqui, agora, quero apenas a linha que tem o número de dias mais baixos:

Eu quero assim,

   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

Só quero remover o nº de duplicação com base no valor mais alto, já experimentei muitos sozinho, mas nada está funcionando.

Me ajude a resolver isso, obrigado antecipadamente.

Respostas

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