PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

giới hạn riêng biệt đối với lựa chọn một đối một

Hãy thử:

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

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

Mặc dù nó không khớp với kết quả mong đợi của bạn, nhưng tôi nghĩ rằng kết quả là chính xác dựa trên những gì bạn mô tả, vì bạn có thể thấy mỗi cặp có sự khác biệt với giá trị tuyệt đối là 1.

Chỉnh sửa - Hãy thử cách sau, dựa trên thứ tự từ a đến 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. Làm cách nào để loại bỏ tất cả các bảng trong psql (thiết bị đầu cuối tương tác PostgreSQL) bắt đầu bằng một từ phổ biến?

  2. PostgreSQL:giá trị khóa trùng lặp vi phạm ràng buộc duy nhất trên lệnh UPDATE

  3. Có cách nào để chạy nhiệm vụ Flyway ngoại trừ một số bảng không?

  4. SQL - Tạo chế độ xem từ nhiều bảng

  5. cách sửa lỗi OperationalError:(psycopg2.OperationalError) máy chủ đóng kết nối đột ngột