2

私はSQLが初めてです。過去 2 か月間の使用状況のデータを報告するためのコースワークが与えられました。誰かがSQLステートメントで私を助けることができますか?

SELECT COUNT(Member_ID,Non_Member_Name) AS Pool_usage_last_2_months
FROM Use_of_pool
WHERE DATEDIFF(‘2012-04-21’,’2012-02-21’) 

過去2ヶ月間の会員利用(member_ID)と非会員利用(IDなし、名前のみ)の合計を数えて、名前と日時などを出力したいということです。同じレポートで。そのような情報を出力する SQL ステートメントはありますか? 修正/提案を歓迎します。

4

2 に答える 2

1

別の WHERE 句が必要です。Use_of_poolテーブルに日付/時刻フィールドが含まれていると仮定すると、次のようになりますdate_field

WHERE date_field >= #2012-02-21# AND date_field <= #2012-04-21#

date_field値に午前 0 時以外の時間コンポーネントを含めることができる場合は、終了日の範囲を 1 日進めて、4 月 21 日のすべての可能な日付/時刻値を取得します。

WHERE date_field >= #2012-02-21# AND date_field <= #2012-04-22#

それはあなたが望むものと一致するように行を制限する必要があります。上のインデックスで高速なパフォーマンスを提供する必要がありますdate_field

ご希望のカウント数が不明です... すべての訪問 (メンバーと非メンバーの両方) に対して 1 つのカウントにするか、メンバーと非メンバーで別々のカウントにするか.

編集: 表の各行が 1 人のユーザーによる訪問を表している場合、行を数えるだけで、選択した期間中の訪問数を判断できます。

SELECT Count(*) AS CountOfVisits
FROM Use_of_pool
WHERE date_field >= #2012-02-21# AND date_field <= #2012-04-21#

同じ人が訪問するたびに に貢献することに注意してくださいCountOfVisits。何人が訪問したかを知りたい場合は、別のアプローチが必要になります

Edit2 : Member_ID と Non_Member_Name を使用して、メンバーと非メンバーの訪問を区別できるようです。Member_ID は、非メンバーの場合は Null であり、メンバーの場合は非 Null です。また、Non_Member_Name は、メンバーの場合は Null、非メンバーの場合は非 Null です。

その場合は、このクエリを試して、メンバーと非メンバーの訪問を別々にカウントしてください。

SELECT
    Sum(IIf(Member_ID Is Not Null, 1, 0)) AS member_visits,
    Sum(IIf(Non_Member_Name Is Not Null, 1, 0)) AS non_member_visits
FROM Use_of_pool
WHERE date_field >= #2012-02-21# AND date_field <= #2012-04-21#
于 2012-04-21T15:13:27.240 に答える
0

SQL の集計関数は、列内のすべてのデータ (より正確には、WHERE 句が選択するすべてのデータ) を使用して、単一のデータを生成します。COUNT は、WHERE 句に一致したデータ行の数を示します。たとえば、次のようになります。

SELECT COUNT(*) AS Non_members FROM Use_of_pool WHERE Member_ID IS NULL

プールが非メンバーによって使用された回数を示します。

SELECT COUNT(DISTINCT Member_ID) AS Members FROM Use_of_pool

プールを少なくとも 1 回使用したメンバーの数が表示されます (DISTINCT は、カウント時に重複を無視するようにデータベース エンジンに指示します)。

WHERE 句を展開して、何をカウントするかをさらに指定できます。「過去 2 か月」が現在および前の暦月を意味する場合は、次のものが必要です。

... WHERE DateDiff("m",Date_field,Date())<=1

それが 2 か月の周期を意味する場合、60 日で概算します。

... WHERE DateDiff("d",Date_field,Date())<60

(Date_field を日付を含むフィールドの名前に置き換えます。)

複数の異なる基準に従って行をカウントする場合、または集計データと個々のデータの両方を出力する場合は、別々の SELECT ステートメントを使用することをお勧めします。

于 2012-04-21T14:49:37.250 に答える