0

観測テーブルからの結果をグループ化しようとしています。私のテーブルには、数秒ごとに株価が含まれています。2 時間ごと、4 時間ごと、8 時間ごとなど、株式に関する集計情報を表示できるようにしたいのですが、これらの期間は午後 5 時に開始する必要があります。たとえば、データが 2012-05-23 17:45:34 に始まる場合、最初の観測は 23 日の 17:00:00 から 23 日の 19:00:00 までというようになります。時間間隔に基づいてデータをグループ化できますが、開始を午後 5 時に設定する方法がわかりません..

4

1 に答える 1

0

where句に条件を追加してみませんか。(日時から) 時間を取り、17:00:00 より大きいことを確認します。午後 5 時より前の場合は、計算に使用しないでください。

編集すでにグループ化が完了していると述べました。where句にサブクエリを追加する最終日の午後5時に開始するのはどうですか(構文がわからない):

where datetimeCol >= (select min(date(datetimeCol) + time(5pm)) from tableUsed where previousUsedConditions or id = outerTable.Id)

編集

より複雑なグループ化があることは知っていますが、(tsql では) これは、where ステートメントを使用して私が念頭に置いていたことです。

declare @tempTable table (mydate smalldatetime)
insert into @tempTable 
    values('2012-05-23 04:37:04.900'),
        ('2012-05-23 18:37:04.900'),
        ('2012-05-24 04:37:04.900'),
        ('2012-05-25 05:37:04.900')     

select * 
from @tempTable as tbl
group by mydate 

select (cast(cast((select min(temp.myDate) from @tempTable as temp) as DATE) as datetime) + cast(cast( '17:00:00.0000000' as time)as datetime))  as 'This is the time that is getting filtered by below'

select * 
from @tempTable as tbl
where tbl.mydate > (cast(cast((select min(temp.myDate) from @tempTable as temp) as DATE) as datetime) + cast(cast( '17:00:00.0000000' as time)as datetime)) 

これにより、次の結果が得られます。

(4 row(s) affected)
mydate
-----------------------
2012-05-23 04:37:00
2012-05-23 18:37:00
2012-05-24 04:37:00
2012-05-25 05:37:00

(4 row(s) affected)

This is the time that is getting filtered by below
--------------------------------------------------
2012-05-23 17:00:00.000

(1 row(s) affected)

mydate
-----------------------
2012-05-23 18:37:00
2012-05-24 04:37:00
2012-05-25 05:37:00

(3 row(s) affected)
于 2012-05-23T19:38:03.370 に答える