我正在处理一个非常简单的查询,该查询会提取数据以显示给定时间范围内某个位置的所有访问者。
SELECT VisitID, UserID, UserName, VisitDate
From Visit
WHERE VisitDate BETWEEN '04/01/2016' AND '04/03/2016'
当然,我得到的结果如下:
VisitID UserID UserName VisitDate
----------------------------------------------------
0001 1234 John Smith 04/01/2016
0002 3456 Jane Doe 04/01/2016
0003 6789 Mike Jones 04/02/2016
0004 1234 John Smith 04/02/2016
0005 4567 Bob Brown 04/02/2016
0006 3456 Jane Doe 04/03/2016
0007 1234 John Smith 04/03/2016
现在我需要做的只是选择在给定时间段内有2次或更多次访问的用户,所以在这个特定的例子中,我不会想要Mike Jones和Bob Brown,因为他们只有1次访问。我不完全确定如何解决这个问题。我认为这将是一个声明变量,将该变量设置为COUNT
VisitID
,然后在WHERE
添加COUNT(VisitID) >= 2
子句的行。但我不确定语法。我是在正确的轨道上吗?如何仅针对多次访问的访问者过滤这些结果?
答案 0 :(得分:4)
如果我理解你,你需要这个:
SELECT UserID, UserName
FROM Visit
WHERE VisitDate BETWEEN '04/01/2016' AND '04/03/2016'
GROUP BY UserID, UserName
HAVING COUNT(*) >= 2
答案 1 :(得分:0)
我更喜欢在CTE中使用窗口函数来处理这类事情:
SELECT DISTINCT UserID, UserName
FROM CTE
WHERE countVal>=2
Per Stan的评论 - 如果您只想要不同的UserName / UserID值,请将最终的SELECT更改为:
oauth2client.client.SignedJwtAssertionCredentials