Sql server GROUPBY返回错误的结果
我有这个疑问:Sql server GROUPBY返回错误的结果,sql-server,Sql Server,我有这个疑问: select e.UserId as UserId, COUNT(*) as [Registrations] from dbo.EventLog as e where e.EventTypeId = 3 and e.Value is not null group by UserId 它返回的示例数据是: UserId Registrations 1 37 3 1 10 2 12 69 13 22 14 5 但我也想选择时间戳。为此,我在selec
select e.UserId as UserId, COUNT(*) as [Registrations] from dbo.EventLog as e
where e.EventTypeId = 3 and e.Value is not null
group by UserId
它返回的示例数据是:
UserId Registrations
1 37
3 1
10 2
12 69
13 22
14 5
但我也想选择时间戳。为此,我在select中添加了e.[时间戳]
,它说:
列“dbo.EventLog.TimeStamp”在选择列表中无效,因为
它既不包含在聚合函数中,也不包含在GROUP BY中
条款
如果我在group by中添加e.[时间戳]
,结果是:
UserId Registrations TimesTamp
1 1 2013-01-09 13:29:19.143
25 1 2013-01-09 13:52:37.687
27 1 2013-01-09 15:00:03.147
27 1 2013-01-09 16:12:01.000
27 1 2013-01-10 16:00:53.757
34 1 2013-01-10 17:13:52.000
提到id为
1的注册是整行的,而不是例如37、2等。对于表示用户1的37个注册的分组,您希望时间戳列包含什么?由于还有37个时间戳值,因此需要一个聚合函数才能使其有意义。例如,如果您想要每个用户的最新注册的时间戳,请使用MAX函数。对于表示用户1的37个注册的分组,您希望时间戳列包含什么?由于还有37个时间戳值,因此需要一个聚合函数才能使其有意义。例如,如果您想要每个用户的最新注册的时间戳,请使用MAX函数。每行的时间戳可能不同,那么您实际指的是共享用户ID的集合中的哪个时间戳
您可以做的是找到第一个时间戳:
select
e.UserId as UserId,
COUNT(*) as [Registrations],
Min(e.Timestamp) as [First Timestamp]
from dbo.EventLog as e
where e.EventTypeId = 3 and e.Value is not null
group by UserId
或者最后一个,使用max()时,每行的时间戳可能不同,那么您实际上指的是共享用户ID的集合中的哪个时间戳
您可以做的是找到第一个时间戳:
select
e.UserId as UserId,
COUNT(*) as [Registrations],
Min(e.Timestamp) as [First Timestamp]
from dbo.EventLog as e
where e.EventTypeId = 3 and e.Value is not null
group by UserId
或者最后一个,使用max()以下是原因。为什么你会得到这样的结果
您将根据用户Id和时间戳进行分组
- 可以有多个用户ID,条件是(e.EventTypeId=3,e.Value不为null),但如果您也按时间戳分组
只有一个用户满足该条件并具有时间戳
- 如果您可以将平均值(时间戳)或最小值或最大值放入,请选择是否要拥有所有注册
祝你好运,原因如下。为什么你会得到这样的结果
您将根据用户Id和时间戳进行分组
- 可以有多个用户ID,条件是(e.EventTypeId=3,e.Value不为null),但如果您也按时间戳分组
只有一个用户满足该条件并具有时间戳
- 如果您可以将平均值(时间戳)或最小值或最大值放入,请选择是否要拥有所有注册
祝你好运MySQL和/或MS SQL Server?不要标记未涉及的产品…@TJ-是的,问题是我需要根据未使用的UserId对其进行分组TS@jarlh建议事物。。如果一个用户ID有几个时间戳,那么预期的结果是什么?您想要全部还是其中一个(哪一个)?@George,因此,如果您不想使用TS进行分组,那么将有多个TS与单个Id
关联,在这种情况下,您希望在最终结果中包括哪个TS?MySQL和/或MS SQL Server?不要标记未涉及的产品…@TJ-是的,问题是我需要根据未使用的UserId对其进行分组TS@jarlh建议事物。。如果一个用户ID有几个时间戳,那么预期的结果是什么?你想要全部还是其中一个(哪一个)?@George,因此,如果你不想使用TS进行分组,那么将有多个TS与单个Id
关联,在这种情况下,你希望在最终结果中包含哪些TS?你应该发布一些示例代码(或a)。包括你已经尝试过的,以及你到底被困在哪里。查看更多信息,谢谢!您应该发布一些示例代码(或示例代码)。包括你已经尝试过的,以及你到底被困在哪里。查看更多信息,谢谢!