DateTime が単一のフィールド (LINQpad クエリ) にある場合の Linq-to-SQL (SQL Server 上) に対するソリューションを次に示します。
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
Linq-to-SQL および/またはデータベースのドライバーを介して Time 列が何に変換されるかによって異なります。
それは次のよう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()