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)。包括你已经尝试过的,以及你到底被困在哪里。查看更多信息,谢谢!您应该发布一些示例代码(或示例代码)。包括你已经尝试过的,以及你到底被困在哪里。查看更多信息,谢谢!