Sql server 我如何按行分组,每个分组中的每个人都有一个月的一天?
我有这个表DDL:Sql server 我如何按行分组,每个分组中的每个人都有一个月的一天?,sql-server,entity-framework,linq,entity-framework-4,Sql Server,Entity Framework,Linq,Entity Framework 4,我有这个表DDL: CREATE TABLE [dbo].[Audit] ( [AuditId] INT IDENTITY (1, 1) NOT NULL, [Entity] INT NOT NULL, [UserId] INT NOT NULL, [Note] VARCHAR(200) NULL, [Date] DATETIME NOT NULL, [Action]
CREATE TABLE [dbo].[Audit]
(
[AuditId] INT IDENTITY (1, 1) NOT NULL,
[Entity] INT NOT NULL,
[UserId] INT NOT NULL,
[Note] VARCHAR(200) NULL,
[Date] DATETIME NOT NULL,
[Action] INT NOT NULL,
CONSTRAINT [PK_Audit]
PRIMARY KEY CLUSTERED ([AuditId] ASC)
);
我想做的是得到一个报告,其中显示了一个用户ID和一个组每天的活动(行)计数
这是否可能与LINQ有关,或者我是否需要使用SQL进行编码,因为需要从DATETIME字段中提取日期
在这方面提供一些帮助和建议,即使使用SQL SELECT也将不胜感激
Date Count
---------------------
29-Feb-2018 25
28-Feb-2018 33
27-Feb-2018 11
26-Feb-2018 44
您应该避免使用关键字作为列或对象名,因为这会使事情变得非常混乱。但以你的例子来说,这是一个非常简单的查询
select [Date] = convert(date, a.Date)
, [Count] = count(*)
from Audit a
group by convert(date, a.Date)
假设您的EF模型看起来像表,您可以使用以下LINQ语句:
from a in context.Audits
group a by EntityFunctions.TruncateTime(a.Date) into grp
select new
{
Date = grp.Key,
Count = grp.Count()
}
由于标记了EntityFramework4,因此必须使用
EntityFunctions
。在以后的版本中,这已更改为DbFunctions
。谢谢。如果我想按日期降序排列,我可以在group by a.date语句后放置orderby吗?我签出了这个,但它不能正确地按日期分组,因为有数千个不同的日期(不是整个日期)。我认为,不知何故,组员也必须使用转换后的日期。