在T-SQL中将24小时分成96个相等的15分钟间隔

时间:2018-12-13 15:06:20

标签: sql sql-server tsql

我有一个表,其中有一个时间间隔(24小时)和一个体积(整数),我需要以15分钟的间隔来显示(一天的总时间为96个间隔)。这是一张表格,其中包含我的样品:

CREATE TABLE #temptable ( [INTERVAL] nvarchar(3), [Volume] decimal(16,4) )
INSERT INTO #temptable
VALUES
( N'001', 1.2000 ), 
( N'002', 1.2000 ), 
( N'003', 1.2000 ), 
( N'004', 1.7000 ), 
( N'005', 1.9000 ), 
( N'006', 1.9000 ), 
( N'007', 1.8000 ), 
( N'008', 1.9000 ), 
( N'009', 2.2000 ), 
( N'010', 1.8000 ), 
( N'011', 2.0000 ), 
( N'012', 1.7000 ), 
( N'013', 1.5000 ), 
( N'014', 1.5000 ), 
( N'015', 1.3000 ), 
( N'016', 1.6000 ), 
( N'017', 1.7000 ), 
( N'018', 2.0000 ), 
( N'019', 2.0000 ), 
( N'020', 2.2000 ), 
( N'021', 2.0000 ), 
( N'022', 2.2000 ), 
( N'023', 1.9000 ), 
( N'024', 1.4000 )
DROP TABLE #temptable 

老实说,我不知道从哪里开始,但是在这种情况下,需要使间隔1到4等于当前间隔(1.2000)/ 4(.3)。由于我将间隔细分为15分钟,因此间隔的总数将为96。

我正在寻找起点。谢谢。

1 个答案:

答案 0 :(得分:1)

如何使用交叉联接引入15分钟的间隔:

WITH minutes AS (
    SELECT 0 AS minute UNION ALL
    SELECT 15 UNION ALL
    SELECT 30 UNION ALL
    SELECT 45
)

SELECT
    t.[INTERVAL] + ':' + RIGHT('00' + CAST(m.minute AS VARCHAR(2)), 2) AS time,
    t.[Volume] / 4.0 AS [Volume]
FROM #temptable t
CROSS JOIN minutes m
ORDER BY
    t.[INTERVAL],
    m.minute;

Demo