ฉันมีรูปหลายเหลี่ยมสองชุดในสองตาราง ชุดทับซ้อนกัน สำหรับรูปหลายเหลี่ยมแต่ละอันในชุด A ฉันต้องการรับ ID ของรูปหลายเหลี่ยมในชุด B ที่ซ้อนทับกันมากที่สุด ฉันใช้ PostgreSQL กับส่วนขยาย PostGIS
ฉันรู้เพียงพอเกี่ยวกับ SQL ที่จะรู้ว่าคุณสามารถเข้าร่วมได้ตามเงื่อนไขจริง / เท็จเท่านั้น ดังนั้นสิ่งนี้จะไม่ทำงาน:
SELECT
a.id as a_id,
b.id as b_id,
FROM
a
JOIN
b
ON
max(ST_Area(ST_Intersection(a.geom, b.geom)))
เนื่องจาก max () ไม่สามารถอยู่ในอนุประโยค ON
ST_Intersects()
คือการทดสอบจริง / เท็จดังนั้นฉันสามารถเข้าร่วมในนั้น แต่รูปหลายเหลี่ยมในชุดมักจะทับซ้อนที่มีมากกว่าหนึ่งรูปหลายเหลี่ยมที่อยู่ในชุด B และฉันต้องการที่จะรู้ว่าที่หนึ่งซ้อนทับมากที่สุด ST_Intersects น่าจะแค่คืนค่า ID ที่ทับซ้อนกันแรกที่เจอโดยไม่คำนึงถึงขอบเขตของการทับซ้อน
ดูเหมือนว่ามันควรจะเป็นไปได้ แต่มันเกินฉัน ความคิดใด ๆ
DISTINCT ON
ยังใหม่สำหรับฉัน - มีประโยชน์มากในบริบทนี้