2011-12-14 29 views
1

我正在嘗試創建一個查詢,該查詢將返回按日期訪問某些內容的不同用戶數量的結果。現在我有一個查詢將顯示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

CORRECTION在的Teradata 13的優化器能夠確定哪個版本是更有效的,基於統計信息。這可以在Teradata 13發佈摘要的「分組和性能等同性分組」一節中找到。 - http://www.info.teradata.com/edownload.cfm?itemid=083440012(PDF)

+0

威爾之後計數不同用戶?原來的問題是針對不同的用戶 – Zeph 2011-12-14 18:22:30

+0

沒有。使用計數(不同的用戶)爲那 – emaillenin 2011-12-14 18:24:04

0

使用 「GROUP BY」 WHERE子句

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