次のような日付に基づいて列の合計を計算する SQL 2008 R2 のクエリが必要です
日付
10/7/2013 12:28:30
10/7/2013 01:28:30
10/7/2013 03:04:30
10/8/2013 06:03:51
金額
100
102
200
300
2013 年 10 月 7日の合計金額が必要です
TotalAmount
402
次のような日付に基づいて列の合計を計算する SQL 2008 R2 のクエリが必要です
日付
10/7/2013 12:28:30
10/7/2013 01:28:30
10/7/2013 03:04:30
10/8/2013 06:03:51
金額
100
102
200
300
2013 年 10 月 7日の合計金額が必要です
TotalAmount
402
以下の範囲フィルターは、入力の時間部分を削除し、それを 1 日のスパンと比較します。where 句の右側に式を保持すると、日付列にインデックスを使用できます。
してはいけないこと:テーブル スキャンが発生します。where convert(date, getdate()) = @day
代わりにこれを行います:
declare @yourTable table (dt datetime, qty int );
insert into @yourTable
select '10/7/2013 12:28:30', 100 union all
select '10/7/2013 01:28:30', 102 union all
select '10/7/2013 03:04:30', 200 union all
select '10/8/2013 06:03:51', 300;
declare @day datetime;
set @day = '10/7/2013'
select sum(qty)
from @yourTable
where dt >= dateadd(dd, datediff(dd, 0, @day), 0) and
dt < dateadd(dd, datediff(dd, 0, @day), 1)
問題は、日付と時刻でグループ化する「グループ化」するときです。datetime 列を再フォーマットする必要があるため、日付だけでグループ化します。
それを行う方法はたくさんあります。例:
select CONVERT (date, GETDATE());
現在の日時を日付に変換します。
(ソース)