sql >> Database teknologi >  >> RDS >> PostgreSQL

en til en distinkt begrænsning af udvælgelsen

Prøv:

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

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

Selvom det ikke stemmer overens med dit forventede output, tror jeg, at outputtet er korrekt baseret på det, du beskrev, da du kan se, at hvert par har en forskel med en absolut værdi på 1.

Rediger - Prøv følgende, baseret på rækkefølgen fra a til 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

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



  1. Mysql 5.6 hovedpine på Mac OSX

  2. Hvordan eksporteres data fra Oracle SQL Developer til Excel?

  3. række_nummer med flere kolonner

  4. Udfyldning af en datatabel i C# ved hjælp af MySQL