У меня есть запрос, который возвращает Date
Username
и Download Count
пользователя, если количество загрузок превышает 2
.
SELECT CONVERT(DATE, [datetime]) 'Date',
actionby AS 'Username',
Count(*) 'Download Count'
FROM [dbo].[log]
WHERE actiontaken = 'Download'
AND type = 'Document'
AND CONVERT(DATE, [datetime]) BETWEEN
CONVERT(DATE,
'" + scanStartDate.ToString("yyyy-MM-dd HH:mm:ss.fff") + "')
AND
CONVERT(DATE, '" + scanEndDate.ToString("yyyy-MM-dd HH:mm:ss.fff") + "')
GROUP BY CONVERT(DATE, [datetime]),
actionby
HAVING Count(*) > 1
ORDER BY Count(*) DESC
Ниже приведена таблица
+------------+----------+----------------+
| Date | Username | Download Count |
+------------+----------+----------------+
| 01/01/2018 | Jane | 3 |
+------------+----------+----------------+
Jane
сделал 3 загрузки.
Но 2 из них - это один и тот же файл (обозначен fileNumber
).
Как я могу изменить свой запрос, чтобы он не добавлял дублирующихся загрузок каких-либо fileNumber
на эту дату?
например. Джейн скачала file1
один раз и file2
дважды. Download Count
будет считать 2
вместо 3
.
Спасибо
РЕДАКТИРОВАТЬ : После реализации ответа @ salman-a:
SELECT CONVERT(DATE, [datetime]) 'Date',
actionby 'Username',
COUNT(DISTINCT filenumber) 'Download Count'
FROM [dbo].[log]
WHERE actiontaken = 'Download'
AND type = 'Document'
AND CONVERT(DATE, [datetime]) BETWEEN
CONVERT(DATE,
'" + scanStartDate.ToString("yyyy-MM-dd HH:mm:ss.fff") + "')
AND
CONVERT(DATE, '" + scanEndDate.ToString("yyyy-MM-dd HH:mm:ss.fff") + "')
GROUP BY CONVERT(DATE, [datetime]),
actionby
HAVING COUNT(DISTINCT filenumber) > 1
ORDER BY COUNT(DISTINCT filenumber) DESC
Дайте мне знать, если я неправильно понял. Спасибо.