sql >> Database >  >> RDS >> PostgreSQL

één op één duidelijke beperking op selectie

Probeer:

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

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

Hoewel het niet overeenkomt met je verwachte output, denk ik dat de output correct is op basis van wat je hebt beschreven, zoals je kunt zien dat elk paar een verschil heeft met een absolute waarde van 1.

Bewerken - Probeer het volgende, gebaseerd op de volgorde van a naar 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

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



  1. Hoe meerdere rapporten met barcode \ of meerdere barcodes in één rapport af te drukken

  2. Afbreekregel '\n' in een bestand exporteren met MySQL INTO OUTFILE

  3. Hoe SQL opvragen met actieve record voor datums tussen gespecificeerde tijden

  4. Verwijder vier byte UTF-8-tekens in klassiek ASP/VBScript (gerelateerd aan MySQL)