我有一个由三列组成的表格:日期,时间和价格。 '时间'栏大约是分钟的时间间隔,但不是每个分钟的时间间隔。我希望创建一个包含Date,FlooredTime,LastPriceInInterval的新表,其中FlooredTime =每个10分钟间隔开始时的时间,LastPriceInInterval是每个间隔内最大可用时间的价格。tsql在每个10分钟的时间间隔内返回最后一个价格
Old Table: New Table:
Date Time Price Date FlooredTime LastPriceInInterval
2012-05-10 02:50:00 1352.7 2012-05-10 02:40:00 1353.0
2012-05-10 02:46:00 1353.0 2012-05-10 02:30:00 1353.5
2012-05-10 02:45:00 1352.8
2012-05-10 02:44:00 1353.2
2012-05-10 02:43:00 1353.1
2012-05-10 02:42:00 1353.2
2012-05-10 02:40:00 1353.4
2012-05-10 02:39:00 1353.5
2012-05-10 02:38:00 1354.6
2012-05-11 03:31:00 1355.0
2012-05-11 03:29:00 1354.0
这是我到目前为止,但现在我卡住了。看起来,内部select语句不喜欢在where子句中使用Max; MAX(日期部分(分,m1.Time)%10)。将非常感谢知道如何使用允许的语法来实现预期的结果。
SELECT TOP 1000 Date
,DATEADD(minute,-DATEPART(minute,Time)%10 ,Time) as FlooredTime
,(Select Price from dbo.MyData
where m3.Date = m1.Date
and DATEPART(hour, m3.Time) = DATEPART(hour, m1.Time)
and datepart(minute,m3.Time)/10 = Floor(datepart(minute,m1.Time)/10)
and datepart(minute,m3.Time)%10 = Max(datepart(minute,m1.Time)%10)
) as LastPriceInInterval
FROM dbo.MyData
where DATEPART(minute,Time)%10 = 0
order by Date Desc, Time Desc
谢谢!
后期编辑 - 我稍后将结果用作合并表达式中的源表。
'tsql'告诉我们它是SQL Server或Sybase,但是*您正在使用哪一个*,哪个版本*? –
SQL express 2008R2 – Yugmorf