sql >> Databasteknik >  >> RDS >> PostgreSQL

en till en distinkt begränsning av urvalet

Försök:

select a.id, a.x as ax, b.x as bx, x.min_abs_diff
  from table_a a
  join table_b b
    on a.id = b.id
  join (select a.id, min(abs(a.x - b.x)) as min_abs_diff
          from table_a a
          join table_b b
            on a.id = b.id
         group by a.id) x
    on x.id = a.id
   and abs(a.x - b.x) = x.min_abs_diff

fiol:http://sqlfiddle.com/#!15/ab5ae/5/0

Även om det inte matchar din förväntade utdata, tror jag att utdata är korrekt baserat på det du beskrev, eftersom du kan se att varje par har en skillnad med ett absolut värde på 1.

Redigera - Prova följande, baserat på ordningen a till b:

select *
  from (select a.id,
               a.x as ax,
               b.x as bx,
               x.min_abs_diff,
               row_number() over(partition by a.id, b.x order by a.id, a.x) as rn
          from table_a a
          join table_b b
            on a.id = b.id
          join (select a.id, min(abs(a.x - b.x)) as min_abs_diff
                 from table_a a
                 join table_b b
                   on a.id = b.id
                group by a.id) x
            on x.id = a.id
           and abs(a.x - b.x) = x.min_abs_diff) x
 where x.rn = 1

Fiol:http://sqlfiddle.com/#!15/ab5ae/19/0



  1. NLS_NUMERIC_CHARACTERS inställning för decimal

  2. ange nytt värde för ft_min_word_len FULLTEXT i mysql

  3. Onödiga frågor i Hibernate - MySql

  4. Python - SQL Connector:Uppdatering fungerar inte