【发布时间】:2020-08-27 12:14:59
【问题描述】:
查询是
select distinct b.UserID , cast(b.entrytime as date) ,count(*) as UserCount
from [dbo].[person] as a
join [dbo].[personcookie] as b
on a.UserID = b.UserID
where cast (b.entrytime as date) >= '08/21/2020'
and cast (b.leavetime as date) <= '08/27/2020' and a.distinction = 99
group by cast(b.entrytime as date), b.UserID
如果相同的 UserID 在同一日期的计数超过 1,则应视为 1。现在如图所示,USERID 10 在 2020-08-26 的计数为 1 USERID 10 的计数为 2 '2020-08-27'。根据要求。
我添加了表格的图像和我想要的输出
【问题讨论】:
-
如果计数始终为 1,为什么还要计数?
-
为什么要使用
DISTINCT和GROUP BY?如果您的GROUP BY尚未返回不同的行集,那么问题出在您的GROUP BY上。DISTINCT和GROUP BY通常不应该在同一个查询中,因为它几乎总是指向一个冗余(DISTINCT)或有缺陷的GROUP BY子句。此外,person以p开头,而不是a(它甚至没有a)。 Bad Habits to Kick : Using table aliases like (a, b, c) or (t1, t2, t3) -
因为有多天数据,如果同一用户多次登录,则单日数据应视为 1。但如果同一用户每天都登录,则计数会增加。
-
将您的输出写入 excel 并请在问题中更新。在当前所需的输出中,第二列中的值应该是多少
-
@SowmyadharGourishetty 解释图片附后。请看
标签: sql sql-server select