2011-12-14 59 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