PostgreSQL クエリで問題が発生しています
私が欲しいのは、距離順に並べられた「キャンペーン」のリストで、場所からの最小距離 [in_lat、in_lng、in_radius] です。1 回は注文のため、もう 1 回はキャンペーンが希望の半径内にあるかどうかを確認するためです。
また、キャンペーンに複数の「Campaignreceiver」エントリ (receivetype [EMAIL、WEBSITE など]) がある可能性があります。
そして、キャンペーンを一度だけ取得したい。したがって、DISTINCT ON。
問題は、「WHERE distance < in_radius」のように機能させるにはどうすればよいかということです。私の推測では、GROUP BY と HAVING を追加していますが、いくつかのテストを行ったところ、うまくいきませんでした。
どんな助けでも大歓迎です!!!
SELECT DISTINCT ON (c.campaign_uuid, distance)
c.campaign_uuid,
prl.lat,
prl.long,
distance_in_km(prl.lat, prl.long, in_lat, in_lng) AS distance
FROM
usercampaignrelations AS ucr
LEFT JOIN
campaignreceivers AS cr
ON
ucr.usercampaign_uuid = cr.usercampaign_uuid
LEFT JOIN
campaigntargetgrouprelations AS ctg
ON
cr.campaigntargetgroup_uuid = ctg.campaigntargetgroup_uuid
LEFT JOIN
campaigns AS c
ON
ucr.campaign_uuid = c.campaign_uuid
LEFT JOIN
companycampaignrelations AS cc
ON
c.campaign_uuid = cc.campaign_uuid
LEFT JOIN
pointradiuslocations AS prl
ON
c.location_uuid = prl.location_uuid
WHERE
ucr.user_uuid = in_user_uuid
AND
(cr.status = 'SENT' OR cr.status = 'RETRIEVED')
AND
distance_in_km(prl.lat, prl.long, in_latitude, in_longtitude) < in_radius
ORDER BY
distance
LIMIT
in_limit