2

SQL SERVER "usage" に 4 つの列で構成されるテーブルがあります

userID, appid, licenseid, dateUsed

ここで、一定期間内にライセンスに基づいてアプリを使用したユーザーの数を確認できるように、テーブルにクエリを実行する必要があります。ユーザー 1 がたとえば 1 月 1 日と 2 日にアプリを使用したとしても、結果では 1 としてカウントされることに注意してください。つまり、時間枠内のユニーク ユーザーです。

そうクエリする

where dateUsed > @from  AND dateUsed < @dateTo

私が戻したいのは、次のような行のテーブルです

、appid、licenseid

誰にもアイデアはありますか?サブクエリとしてカウントを使用して遊んでから、結果を合計しようとしましたが、まだ成功していません。

4

4 に答える 4

3

これをテストしたところ、目的の結果が得られました。

SELECT appid, licenseid, COUNT(DISTINCT userID)
FROM usage
WHERE dateUsed BETWEEN @from AND @dateTo
GROUP BY appid, licenseid
于 2013-10-21T12:54:27.727 に答える
2

このようなものが動作するはずです:

SELECT   appid, licenseid, COUNT(DISTINCT userid) as DistictUsers
FROM     yourTable
WHERE    dateUsed BETWEEN @from AND @dateTo
GROUP BY appid, licenseid
于 2013-10-21T12:52:02.680 に答える
0

ここにクエリを投稿していませんが。PARTITION BY を使用して、ライセンス ID ごとに一意の行数を生成することをお勧めします。個別のライセンスを使用して、ユーザー数に対するサブクエリを作成できます。SELECT .... FROM このサブクエリを実行し、HAVING 句を使用して希望の日付/ユーザーをフィルタリングします。おそらく最良の説明ではありません。クエリの例を投稿してください。

于 2013-10-21T12:55:52.557 に答える
0

コピーして貼り付けて実行するだけで、希望どおりに機能するかどうかを確認できます。

SELECT appId, licenseId, COUNT(userId)
FROM usage
WHERE dateUsed > @from AND dateUsed < @dateTo
GROUP BY appId, licenseId
于 2013-10-21T12:53:58.193 に答える