10일 또는 365일 연속으로 포럼을 방문한 사용자에게 주어지는 배지가 존재한다는 것을 확인했습니다. 하지만 저는 30일 연속으로 포럼을 방문한 사람에게 자동으로 수여되는 배지를 제 포럼에 만들고 싶습니다.
특히 SQL 쿼리를 얻는 것이 가장 중요합니다.
10일 또는 365일 연속으로 포럼을 방문한 사용자에게 주어지는 배지가 존재한다는 것을 확인했습니다. 하지만 저는 30일 연속으로 포럼을 방문한 사람에게 자동으로 수여되는 배지를 제 포럼에 만들고 싶습니다.
특히 SQL 쿼리를 얻는 것이 가장 중요합니다.
참고로, Data Explorer를 사용하여 기존 쿼리를 찾을 수 있습니다.
예: SELECT * from badges WHERE query LIKE '%10 days%'
365일용 쿼리는 다음과 같습니다:
WITH consecutive_visits AS ( SELECT user_id , visited_at , visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int s FROM user_visits ), visits AS ( SELECT user_id , MIN(visited_at) "start" , DENSE_RANK() OVER (PARTITION BY user_id ORDER BY s) "rank" FROM consecutive_visits GROUP BY user_id, s HAVING COUNT(*) >= 365 ) SELECT user_id , "start" + interval '365 days' "granted_at" FROM visits WHERE "rank" = 1
그리고 10일용 쿼리는:
WITH consecutive_visits AS ( SELECT user_id , visited_at , visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int s FROM user_visits ), visits AS ( SELECT user_id , MIN(visited_at) "start" , DENSE_RANK() OVER (PARTITION BY user_id ORDER BY s) "rank" FROM consecutive_visits GROUP BY user_id, s HAVING COUNT(*) >= 10 ) SELECT user_id , "start" + interval '10 days' "granted_at" FROM visits WHERE "rank" = 1
따라서 30일용 쿼리는 아래처럼 하면 될 것 같습니다:
WITH consecutive_visits AS ( SELECT user_id , visited_at , visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int s FROM user_visits ), visits AS ( SELECT user_id , MIN(visited_at) "start" , DENSE_RANK() OVER (PARTITION BY user_id ORDER BY s) "rank" FROM consecutive_visits GROUP BY user_id, s HAVING COUNT(*) >= 30 ) SELECT user_id , "start" + interval '30 days' "granted_at" FROM visits WHERE "rank" = 1
… 실행해 보니 정상적으로 동작하고 결과도 합리적으로 보이긴 하지만, 결과를 면밀히 확인해 보지는 않았습니다 ![]()
정말 감사합니다.
막히셨나요? 무슨 뜻이신가요? (제 스페인어가 서투른 점 양해 부탁드립니다) 방금 확인해 보니 정상적으로 작동합니다. 필수 항목이 모두 입력되었는지, 그리고 위에 검증 오류가 없는지 확인해 보세요. 저장(Saves)을 누르면 왼쪽 목록 하단에 새 배지가 표시되어야 합니다. SQL 아래에 있는 링크를 사용하여 결과를 미리 볼 수도 있습니다.
10일을 참조하는 배지의 SQL을 포럼에서 복사해서 30일로 바꾸려고 했는데, 복사가 되지 않았습니다. 하지만 님의 도움 덕분에 제가 원하는 배지를 만들 수 있었습니다.