Как должен быть разработан оператор SQL для расчета количества устройств?

Как мне спроектировать оператор sql, чтобы также рассчитать количество устройств в каждом идентификаторе User-Agent?

Я работаю в MS Log Parser Studio (LOGPARSER), занимаюсь программированием различных журналов запросов Exchange (IIS W3C LOG) для составления статистики мобильных устройств.

Это запрос:

SELECT TO_STRING(To_timestamp(date, time), 'MM-dd-yyyy') as Day, cs(user-agent) as
UserAgent /* Count(MyDeviceId as DeviceId) as NrOfSameDevice 
USING
EXTRACT_VALUE(cs-uri-query,'DeviceId') as MyDeviceId */
FROM '[LOGFILEPATH]' 
WHERE cs-uri-stem LIKE '%Microsoft-Server-ActiveSync%'
GROUP BY Day, UserAgent
ORDER BY Day

Результат этого запроса:

введите здесь описание изображения


person Christofffer    schedule 01.11.2012    source источник


Ответы (1)


Я предполагаю, что вы хотите рассчитать количество различных устройств для каждой пары Day, UserAgent.

Обычно это делается с помощью COUNT(DISTINCT) или вложенного запроса, но поскольку LogParser не поддерживает ни того, ни другого (COUNT(DISTINCT) не поддерживается с помощью GROUP BY), вам придется разбить запрос на две части:

  1. Первый запрос выбирает различные комбинации Day, UserAgent и DeviceId:

    SELECT DISTINCT TO_STRING (To_timestamp (дата, время), 'MM-dd-yyyy') в качестве дня, cs (user-agent) в качестве UserAgent, EXTRACT_VALUE (cs-uri-query, 'DeviceId') в качестве MyDeviceId INTO TmpOutput.csv FROM '[ПУТЬ К ФАЙЛУ ЖУРНАЛА]'

  2. Второй запрос анализирует результат первой группировки по первым двум полям:

    ВЫБЕРИТЕ День, UserAgent, COUNT(*) FROM TmpOutput.csv СГРУППИРОВАТЬ ПО Дню, UserAgent ORDER BY Day

Убедитесь, что первая команда настроена также на вывод заголовков в TmpOutput.csv.

person Gabriele Giuseppini    schedule 04.12.2012