PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

едно към едно ясно ограничение на избора

Опитайте:

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

цигулка:http://sqlfiddle.com/#!15/ab5ae/5/0

Въпреки че не съвпада с очаквания ви изход, смятам, че изходът е правилен въз основа на описаното от вас, както можете да видите, че всяка двойка има разлика с абсолютна стойност 1.

Редактиране - Опитайте следното въз основа на реда от a до 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свързване на JSON редове

  2. Извличане на първата цифрова част от полето

  3. Как да изградите релационни таблици в двустранен пазар

  4. PGAdmin:Няма връзка със сървъра или връзката със сървъра е затворена

  5. Изтриване на дублиращи се редове от таблицата без уникален ключ