【发布时间】:2018-11-05 09:47:33
【问题描述】:
如果下载计数超过2,我有一个查询返回用户的Date Username 和Download Count。
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
如果我误解了,请告诉我。谢谢。
【问题讨论】:
-
您可以将
HAVING Count(*) > 1更改为HAVING Count(distinct fileNumber) > 1以计算每个组的不同文件编号。 -
@JohnLBevan:您最好将此作为答案添加,因为当前的两个答案都是错误的:-)
-
谢谢@dnoeth / 现在有了这个解决方案的答案:stackoverflow.com/a/53152809/361842
标签: sql sql-server tsql group-by