我正在尝试创建一个查询,该查询将返回按日期访问某些内容的不同用户数的结果。现在我有一个显示2列的查询,第一列是日期,第二列是用户名。它将列出在特定日期访问该应用程序的所有不同用户,但每个用户都有自己的不同行。以下是执行此操作的查询:
SELECT DISTINCT logdate, User AS ReportUser
FROM table
WHERE appname='abcd1234' AND logdate >=DATE-30
我尝试在用户周围放置COUNT(),但是它表示选定的非聚合值必须是关联组的一部分。
我知道如何才能让这个查询显示过去30天的行以及不同用户的数量?
答案 0 :(得分:1)
这将是正确的方法。
SELECT logdate, Count(User) AS ReportUser
FROM table
WHERE appname='abcd1234' AND logdate >=DATE-30
GROUP BY 1
从不在Teradata中使用DINTINCT
。它总是会降低您的查询性能。请改用GROUP BY
。
更正 在Teradata 13中,优化程序可以根据统计信息确定哪个版本的效率更高。这可以在Teradata 13的发布摘要“Group By和DISTINCT Performance Equivalence”中找到。 - http://www.info.teradata.com/edownload.cfm?itemid=083440012(PDF)
答案 1 :(得分:0)
在WHERE子句
之后使用“GROUP BY”SELECT logdate, COUNT (User) AS ReportUser
FROM table
WHERE appname='abcd1234' AND logdate >=DATE-30
GROUP BY logdate