FIX: consecutive_visits query wasn't return only the first result per user

This commit is contained in:
Régis Hanol
2017-09-07 01:08:28 +02:00
parent 4142bed1af
commit db920673dc

View File

@@ -234,13 +234,18 @@ SQL
def self.consecutive_visits(days) def self.consecutive_visits(days)
<<~SQL <<~SQL
SELECT user_id, "start" + interval '1' day * COUNT(*) AS "granted_at" WITH consecutive_visits AS (
FROM ( SELECT user_id, visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int "start"
SELECT user_id, visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int "start" FROM user_visits
FROM user_visits ), visits AS (
) s SELECT user_id, "start", DENSE_RANK() OVER (PARTITION BY user_id ORDER BY "start") "rank"
GROUP BY user_id, "start" FROM consecutive_visits
GROUP BY user_id, "start"
HAVING COUNT(*) >= #{days} HAVING COUNT(*) >= #{days}
)
SELECT user_id, "start" + interval '#{days} days' "granted_at"
FROM visits
WHERE "rank" = 1
SQL SQL
end end