我工作的一個旅遊引擎網站,寫一個複雜的查詢,以匹配基於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 –