2

次の表があり、重複レコードを含めずに行の総数をカウントする必要があります。

CustomerID
test1
test1
test2
test3
test4
test4

ご覧のとおり、行の総数は6ですが、test1が2つとtest4が2つあり、クエリが4を返すようにします。IOW、で一意の値をカウントしたいと思いますCustomerID

サブクエリを試しましたが、うまくいきませんでした。

-2012年6月27日更新-

ありがとう、両方とも私のために働いた:

  1. SELECT COUNT(*)FROM(SELECT CustomerID FROM TheTable GROUP BY CustomerID)as
  2. SELECT COUNT(*)FROM(SELECT DISTINCT CustomerID FROM TheTable)AS sub;

今日追加されたCustomerIDのみを保持し、それらをカウントするクエリが必要になりました。

例えば、

CustomerID DateAdded
test1 25/06/2012
test1 25/06/2012
test2 26/06/2012
test3 27/06/2012 - Today
test4 27/06/2012 - Today
test4 27/06/2012 - Today

次に、3を返す必要があります。

提供されている2つのソリューションに次のクエリを追加しようとしましたが、どちらも機能しないか、必要な値を返すことができませんでした。

HAVING(([TheTable] .DateAdded)= Date());

4

2 に答える 2

4

これはSQLで機能しますが、Accessでも機能するはずです。

SELECT COUNT(DISTINCT CustomerID) FROM TheTable 

編集:コメントのジェフによると、Accessは上記の構文をサポートしていません。

ただし、これは確実に機能するはずです。

SELECT COUNT(*) FROM ( SELECT CustomerID FROM TheTable GROUP BY CustomerID ) a

日付で制限するには

SELECT COUNT(*) FROM ( 
    SELECT TheTable.CustomerID FROM TheTable GROUP BY CustomerID 
    WHERE TheTable.DateAdded >= Date()
) a
于 2012-06-26T05:48:29.410 に答える
3

dbasemanの回答の2番目の提案は、私には正しいように見えます。この代替手段も機能するはずです。

SELECT COUNT(*)
FROM
    (
        SELECT DISTINCT CustomerID FROM TheTable
    ) AS sub;

それがdbasemanよりも有利かどうかはわかりませんGROUP BY。両方のアプローチをテストすることにした場合は、コメントを追加して、見つけたものをお知らせください。

あなたのコメントに基づいて、「今日追加されたレコードのみ」を評価したいとします。テーブルに関する十分な情報を提供していないため、テーブルに。という名前の日付/時刻フィールドが含まれているように見せかけますdate_added。また、レコードを追加するたびに、現在の日付を深夜としてそのフィールドに保存します。その場合WHERE、サブクエリに句を追加してdate_added、今日の日付と等しい行のみを考慮するようにdbエンジンに要求できます。このDate()関数は、時刻コンポーネントとして深夜を使用して、今日の日付を提供します。

SELECT COUNT(*)
FROM
    (
        SELECT DISTINCT CustomerID FROM TheTable
        WHERE date_added = Date()
    ) AS sub;

フィールド名に置き換えるdate_addedと、私の仮定が正しければ、それは機能するはずです。ただし、date_added値にmidnite以外の時間コンポーネントが含まれている場合は、今日からのすべての日付/時刻値WHEREをキャプチャするように句を修正する必要があります。

WHERE date_added >= Date() AND date_added < (Date() + 1)
于 2012-06-26T15:38:33.997 に答える