Как должен быть составлен оператор 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
Результат этого запроса:
1 ответ
Я предполагаю, что вы хотите рассчитать количество различных устройств для каждого дня, пара UserAgent.
Обычно это делается с помощью COUNT(DISTINCT) или вложенного запроса, но поскольку LogParser не поддерживает ни того, ни другого (COUNT(DISTINCT) не поддерживается с GROUP BY), вам придется разбить запрос на две части:
Первый запрос выбирает различные комбинации Day, UserAgent и DeviceId:
ВЫБЕРИТЕ DISTINCT TO_STRING(To_timestamp(дата, время), 'MM-dd-гггг') в качестве Дня, cs(пользовательский агент) в качестве UserAgent, EXTRACT_VALUE(cs-uri-query,'DeviceId') в качестве MyDeviceId INTO TmpOutput.csv FROM '[LOGFILEPATH]
Второй запрос анализирует результат первой группировки по первым двум полям:
ВЫБЕРИТЕ Day, UserAgent, COUNT(*) FROM TmpOutput.csv GROUP BY Day, UserAgent ORDER BY Day
Убедитесь, что первая команда настроена также на вывод заголовков в TmpOutput.csv.