我工作的一个旅游引擎网站,写一个复杂的查询,以匹配基于IP地址,与他们预约的访客的搜索查询目的地和日期所以我可以稍后计算转换比率。
问题
需要有基于参数的多个转化率(在这种情况下,utm_source我从RequestUrl存储在搜索表中提取)。问题是有些用户从不同的位置进行多次搜索。有时我们会在请求中获得utm_source,有时候不会......并且当然我们只需要匹配一次预订。参见查询结果的截图如下,以更好地理解:
见第3和第4行具有为值列相同的预订ID等。但不同的值。我只需要选择其中的一种,但不能同时选择两种。基本上,如果超过1,我需要选择不是“N/A”的1。
我的查询:
SELECT DISTINCT "B"."Id" AS "BookingId", "PQ"."IPAddress", "PQ"."To", "PQ"."SearchDate", "PQ"."Value"
FROM
(
SELECT DISTINCT "IPAddress", "To", "CreatedAt"::date AS "SearchDate", COALESCE(SUBSTRING("RequestUrl", 'utm_source=([^&]*)'), 'N/A') AS "Value"
FROM dbo."PackageQueries"
WHERE "SiteId" = '<The ID>'
AND "CreatedAt" >= '<Start Date>'
AND "CreatedAt" < '<End Date>'
) AS "PQ"
INNER JOIN dbo."Bookings" AS "B"
ON "PQ"."IPAddress" = "B"."IPAddress"
AND "B"."To" = "PQ"."To"
AND "B"."BookingDate"::date = "PQ"."SearchDate"
WHERE "B"."SiteId" = '<The ID>'
AND "B"."BookingStatus" = 2
AND "B"."BookingDate" >= '<Start Date>'
AND "B"."BookingDate" < '<End Date>'
ORDER BY "B"."Id", "PQ"."IPAddress", "PQ"."To";
http://stackoverflow.com/questions/tagged/postgresql+greatest-n-per-group –
@a_horse_with_no_name,谢谢你的链接..并没有这么多的downvote 。 :-D。这比那些情况稍微复杂一些。首先,我不能仅仅通过一些可用的整数或日期/时间值来排序,因此我认为它不值得投票表决,但这样做是可以的。我找到了一个解决方案,我会在一会儿发布自己的答案... – Matt
我没有downvote –