【问题标题】:Grouping in SQL Server when you have a datetime2 column当您有 datetime2 列时在 SQL Server 中进行分组
【发布时间】:2020-04-21 10:22:08
【问题描述】:

我有一个格式如下的表格:

Date                        Login
2020-03-12 01:42:00.0000000 agent2 
2020-03-12 01:42:00.0000000 agent2   
2020-03-12 01:43:00.0000000 pma
2020-03-12 01:43:00.0000000 agent2
2020-03-12 01:43:00.0000000 agent2 
2020-03-12 01:43:00.0000000 agent3  
2020-03-12 01:43:00.0000000 agent1 
2020-03-12 01:43:00.0000000 agent1 

我需要每分钟对每个用户进行分组,但是,当在登录字段上使用分组依据时(如下所示),我收到错误“选择列表中的“日期”列无效,因为它不包含在聚合函数或 GROUP BY 子句中”。

SELECT  Date , Login
  FROM connections
  GROUP BY login

预期的结果是这样的:

Date                        Login    Connections
2020-03-12 01:42:00.0000000 agent2   2
2020-03-12 01:43:00.0000000 pma      1
2020-03-12 01:43:00.0000000 agent2   2
2020-03-12 01:43:00.0000000 agent3   1
2020-03-12 01:43:00.0000000 agent1   2

这是因为当你有一个 datetime2 类型的列时不能分组吗?我需要为连接数创建另一个表吗?

【问题讨论】:

  • “当你有一个 datetime2 类型的列时,你可以分组吗?” 是的,你可以按你想要的任何表达式(不推荐使用的数据类型)进行分组,例如 @987654324 @ 没有区别。向我们展示您的尝试、预期结果并解释为什么该尝试不是您想要的。
  • 该语句将出错,您的列Date 上没有聚合。它不在你说的GROUP BY 中,。
  • 你应该学习如何正确使用GROUP BY。您不能随心所欲地编写查询,并期望 SQL Server 能够理解并运行它。

标签: sql sql-server tsql datetime group-by


【解决方案1】:

没有在查询中按datetime2 列分组,所以它当然不起作用。

您需要将其添加到GROUP BY,然后添加COUNT

SELECT [Date], --I suggest a better name, date is a different data type
       [Login], --I suggest a different name. LOGIN is a reserved keyword
       COUNT(IDColumn) --I assume you have an ID you can count on?
FROM dbo.connections
GROUP BY [Date],
         [Login];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    相关资源
    最近更新 更多