2011-12-14 18 views
1

日付で何かをアクセスした別のユーザーの数の結果を返すクエリを作成しようとしています。今は2つの列を表示するクエリがあります。最初は日付、2番目はユーザー名です。特定の日付にアプリケーションにアクセスした個々のユーザーをすべて一覧表示しますが、それぞれに独自の行があります。ここではそれを行うクエリは次のとおりです。日付でユーザー数を取得する

SELECT DISTINCT logdate, User AS ReportUser 
FROM table   
WHERE appname='abcd1234' AND logdate >=DATE-30 

私は、ユーザーの周り)(COUNTを入れて試してみましたが、それは選択された非集計値は、関連するグループの一部でなければなりませんと言います。

どのようにしてこのクエリを取得して、過去30日間の行と別個のユーザー数を表示することができますか?

答えて

1

これは正しいアプローチです。

SELECT logdate, Count(User) AS ReportUser 
FROM table   
WHERE appname='abcd1234' AND logdate >=DATE-30 
GROUP BY 1 

のTeradataでDINTINCTを使用しないでください。常にクエリのパフォーマンスが低下します。代わりにGROUP BYを使用してください。テラ13において

CORRECTIONオプティマイザは統計に基づいて、より効率的にされているバージョンを判断することができます。これは、「Group ByとDISTINCT Performance Equivalence」の「Teradataのリリース概要」13にあります。 - "BY GROUP" http://www.info.teradata.com/edownload.cfm?itemid=083440012(PDF)

+0

ウィル後に個別のユーザーを数えること?元の質問は別のユーザーのためでした – Zeph

+0

いいえ。カウントを使用する(別のユーザー) – emaillenin

+0

ありがとうございます。ただし、クエリが実行されるたびにテーブルに行が挿入されるため、カウント(別のユーザー)を使用する必要があります。 – craigtb

0

使用WHERE句

SELECT logdate, COUNT (User) AS ReportUser 
FROM table   
WHERE appname='abcd1234' AND logdate >=DATE-30 
GROUP BY logdate 
+0

DISTINCTはTERADATAの不名誉です – emaillenin

+1

TD 13より前では、DISTINCTをGROUP BYよりも使用する必要があるというニュアンスを理解する必要がありました。 Teradata 13の後、オプティマイザがそれを処理します。上記の私のコメントを参照してください。 –

関連する問題