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

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

CORRECTION В Teradata 13 оптимизатор способен определяет, какая версия является более эффективной, на основе статистических данных. Это можно найти в сводке по выпуску для Teradata 13 в разделе «Групповое соответствие и эквивалентность производительности DISTINCT». - http://www.info.teradata.com/edownload.cfm?itemid=083440012 (PDF)

+0

Воли, что рассчитывать отдельные пользователь? Первоначальный вопрос был для разных пользователей – Zeph

+0

no. Используйте счетчик (отдельный пользователь) для этого – emaillenin

+0

. Спасибо, мне нужно использовать count (отдельный пользователь), хотя, поскольку таблица вставляет строку каждый раз, когда выполняется запрос. – craigtb

0

использование "GROUP BY" после предложения 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 оптимизатор обрабатывает его для вас. См. Мой комментарий выше. –

Смежные вопросы