这是针对 Linq-to-SQL(在 SQL Server 上)的解决方案,其中 DateTime 在单个字段中(LINQpad 查询):
Const BaseDate As Date = #9/24/2012#
Const PeriodMinutes As Integer = 15
Dim p = From t In TestData _
Group By q=CInt(Math.Floor((t.SomeDate - BaseDate).TotalMinutes/PeriodMinutes)) Into Group _
Select s=BaseDate.AddMinutes(q*PeriodMinutes), _
e=BaseDate.AddMinutes((q+1)*PeriodMinutes), _
ids=Aggregate g In Group Select g.ProcessID Distinct Into Count()
p.Dump
使用不同的类型和其他“小”调整可以产生更简单的 SQL 后端代码。
对于您的实际数据库,您需要调整Group By
,尽管它现在取决于您的 Time 列通过 Linq-to-SQL 和/或您的数据库驱动程序转换为什么。
因为它是这样TimeSpan
的Group By
:
Group By d=t.[Date], q=CInt(Math.Floor(t.[Time].TotalMinutes/PeriodMinutes)) Into Group _
Select s=d.AddMinutes(q*PeriodMinutes), _
e=d.AddMinutes((q+1)*PeriodMinutes), _
ids=Aggregate g In Group Select g.ProcessID Distinct Into Count()