不确定如何处理此问题。
这是填充表格的方式...(参见屏幕截图)表中的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
答案 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