Получение количества пользователей по дате - PullRequest
1 голос
/ 14 декабря 2011

Я пытаюсь создать запрос, который будет возвращать результаты для числа отдельных пользователей, которые обращались к чему-либо по дате. Прямо сейчас у меня есть запрос, который будет отображать 2 столбца, первый из которых является датой, а второй - именем пользователя. В нем будут перечислены все отдельные пользователи, которые обращались к приложению в определенный день, но каждый из них будет иметь свою собственную отдельную строку. Вот запрос, который делает это:

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

Я попытался поместить COUNT () в поле User, но он говорит, что выбранные неагрегированные значения должны быть частью связанной группы.

Есть идеи, как сделать так, чтобы этот запрос отображался как строка за последние 30 дней и количество отдельных пользователей?

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

Это будет правильный подход для этого.

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

Никогда использовать DINTINCT в Teradata. Это всегда снижает производительность вашего запроса. Вместо этого используйте GROUP BY.

ИСПРАВЛЕНИЕ В Teradata 13 оптимизатор может определить, какая версия является более эффективной, на основе статистики. Это можно найти в Сводке релиза для Teradata 13 в разделе «Эквивалентность производительности по группам и DISTINCT». - http://www.info.teradata.com/edownload.cfm?itemid=083440012 (PDF)

0 голосов
/ 14 декабря 2011

используйте "GROUP BY" после предложения WHERE

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