バッジの適格性を確認

当社のユーザーの一人が、特定のバッジを取得すべきだと感じていることを報告しました。バッジ管理ページを少し確認し、「付与されたバッジのプレビュー」クエリを実行しましたが、リストには表示されませんでした。

潜在的な資格を確認する最善の方法は、Data Explorer を使用してデータベースからさらに情報を取得することでしょうか?

実際のバッジページ(管理ダッシュボード経由)でクエリ結果をプレビューできます。おそらく、これを実行されたのだと思います。

Data Explorer で同じクエリを実行すれば、同じ結果が返ってきます。

それでも解決しない場合は、メールでご連絡ください。一緒に詳しく調査いたします。

「Aficionado(100 日連続)」バッジに関する質問を数多くいただいています。問題の多くは、ユーザーのロケールとサーバーの時刻との時差により、1 日以上欠けてしまうことにあります。

バッジ付与に使用されるクエリについては、以前から少し混乱していました。今は理解できたと思います。以下は、同様のロジックを使用した Data Explorer クエリです。これはユーザーの連続訪問期間を返します。各連続訪問期間について、開始日、連続日数、終了日を返します。デフォルトでは 10 回以上の訪問があるすべての期間が返されます。ユーザーがどの日を欠いたかを確認するには、min_days パラメータを 1 に設定してください。

結果の最初の行で返される period_end の値が、クエリを実行した当日の日付である場合、そのユーザーはまだバッジの資格を維持しています。

--[params]
-- string :username
-- int :min_days = 10

WITH consecutive_visits AS (
  SELECT user_id,
       visited_at,
       -- s の値は連続した日数の各グループで同じになります
       visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int s
    FROM user_visits
    WHERE user_id = (SELECT id FROM users WHERE username = :username)
)

SELECT
MIN(visited_at) period_start,
COUNT(*) AS consecutive_days,
MAX(visited_at) period_end
FROM consecutive_visits
GROUP BY user_id, s
HAVING COUNT(*) >= :min_days
ORDER BY period_start DESC

完璧です。求めていた洞察が得られました :slight_smile: