WITH MonthlyLogins AS (
SELECT
Username,
LicenseType,
DATE_TRUNC('month', LoginTime) AS LoginMonth,
COUNT(DISTINCT DATE(LoginTime)) AS UniqueLoginDays
FROM your_table
WHERE LoginTime >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '3 month')
GROUP BY Username, LicenseType, LoginMonth
)
SELECT
Username,
LicenseType,
SUM(UniqueLoginDays) AS TotalUniqueLoginDays
FROM MonthlyLogins
GROUP BY Username, LicenseType
ORDER BY TotalUniqueLoginDays DESC;
説明:
WITH MonthlyLogins AS (...): MonthlyLogins という名前の共通テーブル式(CTE)を定義して、各月内のユーザーとライセンス タイプごとの一意のログイン日数を計算します。
SELECT ... FROM your_table WHERE LoginTime >= ...: テーブルから関連するデータを選択し、過去 3 か月のログイン イベントをフィルタします。
DATE_TRUNC('month', LoginTime) AS LoginMonth: LoginTime 列から月の初めを抽出し、LoginMonth という別名を付けます。
COUNT(DISTINCT DATE(LoginTime)) AS UniqueLoginDays: 各月のログインの日付を個別にカウントし、ユニークなログイン日数を取得します。
GROUP BY Username, LicenseType, LoginMonth: 結果をユーザー名、ライセンス タイプ、ログイン月でグループ化します。
SELECT ... FROM MonthlyLogins GROUP BY Username, LicenseType: ユーザー名とライセンス タイプを選択し、各ユーザーとライセンス タイプについてすべての月で UniqueLoginDays を合計します。
ORDER BY TotalUniqueLoginDays DESC: ユニーク ログイン日の合計数に基づいて結果を降順で並べ替えます。