我在使用 PostgreSQL 查询时遇到了一些问题
我想要的是一个“广告系列”列表,按距离排序,并且在距某个位置 [in_lat, in_lng, in_radius] 的最小距离内 现在,我正在检索距离(使用 distance_in_km(...) )两次。一次用于订购,一次用于检查事件是否在我的首选半径内。
此外,一个事件可能有多个“Campaignreceiver”条目(接收类型 [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
最佳答案
AFAIK,distance_in_km() 只会被调用一次(每行),只要您将它与相同的参数一起使用,因此 WHERE 和 ORDER BY 将不会再次评估它。
关于sql - PostgreSQL distinct on, group by, having in one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6359015/