1
我感到有一些麻煩,有PostgreSQL的查詢PostgreSQL截然不同,組合在一起?
我要的是「活動」,由距離排序的名單,並從一個位置的最小距離內[in_lat,in_lng,in_radius現在 ,我正在檢索距離(與distance_in_km(...))兩次。一次用於訂購,一次用於檢查廣告系列是否在我的首選半徑內。
而且,這有可能是一個活動有多個「Campaignreceiver」項(接收類型[電子郵件,網站等..])
我要檢索的活動只有一次。因此DISTINCT ON。
所以問題是,我怎麼能得到像「在哪裏距離< 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