0

我正在尝试对观察表中的结果进行分组。我的表每隔几秒就包含一次库存值。我希望能够每 2 小时、4 小时、8 小时等显示一次有关股票的汇总信息,但我需要这些时间段从下午 5 点开始。例如,如果数据从 2012 年 5 月 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 回答