tsql 返回每 10 分钟时间间隔内的最后价格

标签 tsql select time sql-server-2008-r2 sql-server-express

我有一个包含三列的表格:日期、时间和价格。 'time' 列大约是分钟间隔,但不是每分钟间隔都表示出来。我希望创建一个包含 Date、FlooredTime、LastPriceInInterval 的新表,其中 FlooredTime = 每个 10 分钟间隔开始时的时间,LastPriceInInterval 是每个间隔内最大可用时间的价格。

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(datepart(minute,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

谢谢!

后期编辑 - 稍后我将使用结果作为 Merge 表达式中的源表。

最佳答案

你能不能先确定间隔,得到每个间隔的最长时间,然后与表格结合得到价格?使用 CTE您可以轻松实现这一目标:

;WITH intervals(Date, T1, MaxTime) AS (
SELECT
    Date
    , DATEADD(minute, -DATEPART(minute, Time)%10, Time)
    , MAX(Time) AS MaxTime
FROM dbo.MyData
GROUP BY Date
    , DATEADD(minute, -DATEPART(minute, Time)%10, Time)
)
SELECT t.Date AS Date, i.T1 AS Time, t.Price
FROM dbo.MyData t
INNER JOIN intervals i ON t.Date = i.Date AND t.Time = i.MaxTime
ORDER BY Date DESC, Time DESC

关于tsql 返回每 10 分钟时间间隔内的最后价格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11304220/

相关文章:

sql-server - 如何使用 SQL 从文字中获取变量值?

sql-server - 如何像 SSMS 一样在 T-SQL 中将 TIMESTAMP 值转换为 VARCHAR?

mysql - 如何在 mysql 中完成此操作?

sql - 列出一名员工的所有列(dept、emp、salgrade)

java - 在Java中,有没有可能执行一个方法一段时间,达到时间限制就停止?

sql - 将CASE语句与isull和else一起使用

sql-server - 将插入或更新另一个表的 SQL Server TRIGGER

SQL 从一个表或其他表中选择

javascript - Flot 拒绝显示数据,但可以正常解析 JSON 标签

c# - LocalTime 和 UniversalTime c# 之间的区别