SQL Server 2008获取Group Count = 1的记录

时间:2013-12-28 17:22:07

标签: sql sql-server sql-server-2008

不确定如何处理此问题。

这是填充表格的方式...(参见屏幕截图)表中的UserID_Combo有多条记录。该字段由GUID(UserID)和访问的日期和时间组成。对于UserID_Combo在表格中出现的页面上的每次单击。如果用户在第二天返回相同的UserID,但在表中显示不同的日期和时间。如屏幕截图05b所示,用户日期和时间戳是不同的,这意味着他们两次点击该页面。在本月底,我想找出哪个用户只打了一次页面。在数据中我想返回用户057bd的数据突出显示?

这是我产生结果的SQL Server 2008查询:

SELECT     TOP (100) PERCENT UserID + '_' + REPLACE(REPLACE(REPLACE(CONVERT(nvarchar(30), wfoStartTime, 110) + ' ' + CONVERT(nvarchar(30), wfoStartTime, 14), '-', '_'), 
                      ' ', '_'), ':', '_') AS UserID_Combo, UserID, COUNT(UserID) AS UserID_Count, wfoKey
FROM         dbo.tbl_User_Statistics2
GROUP BY UserID + '_' + REPLACE(REPLACE(REPLACE(CONVERT(nvarchar(30), wfoStartTime, 110) + ' ' + CONVERT(nvarchar(30), wfoStartTime, 14), '-', '_'), ' ', '_'), ':', '_'), 
                      UserID, wfoKey
HAVING      (wfoKey = 'df718d2b98')
ORDER BY UserID

duplicate groups

2 个答案:

答案 0 :(得分:1)

您只需要group by UserId并选择仅显示日期的记录(我认为)。如果您使用的是SQL Server 2008或更高版本。这将返回仅在一个日期点击页面的UserIds:

select UserID
from dbo.tbl_User_Statistics2
group by UserID
having count(distinct cast(wfoStartTime as date)) = 1
order by UserId;

如果你只想要{em} 一次点击UserId

select UserID
from dbo.tbl_User_Statistics2
group by UserID
having count(*) = 1
order by UserId;

答案 1 :(得分:0)

您需要HAVING CLAUSE使用GROUP BY

这将是您的查询:

SELECT TOP (100) PERCENT UserID + '_' + REPLACE(REPLACE(REPLACE(CONVERT(nvarchar(30), wfoStartTime, 110) + ' ' + CONVERT(nvarchar(30), wfoStartTime, 14), '-', '_'), 
                  ' ', '_'), ':', '_') AS UserID_Combo, UserID, COUNT(UserID) AS UserID_Count
FROM  dbo.tbl_User_Statistics2
GROUP BY UserID + '_' + REPLACE(REPLACE(REPLACE(CONVERT(nvarchar(30), wfoStartTime, 110) + ' ' + CONVERT(nvarchar(30), wfoStartTime, 14), '-', '_'), ' ', '_'), ':', '_'), 
UserID
HAVING COUNT(UserID) = 1
ORDER BY UserID