Sql server TSQL准备15分钟区块数据

Sql server TSQL准备15分钟区块数据,sql-server,tsql,parallel-data-warehouse,Sql Server,Tsql,Parallel Data Warehouse,我有一个仓库事实表,其中包含通过数据馈送从供应商处收到的原始数据(甚至是重复数据)。我需要准备15分钟间隔的数据块。如何才能最好地使用SQL Server查询来完成此操作。例如样本数据 ID key Date Value 1 1 2013-10-08 00:00:00.000 10 2 1 2013-10-08 00:23:00.000 15 3 1 2013-10-08 01:00:0

我有一个仓库事实表,其中包含通过数据馈送从供应商处收到的原始数据(甚至是重复数据)。我需要准备15分钟间隔的数据块。如何才能最好地使用SQL Server查询来完成此操作。例如样本数据

ID key Date                              Value
1  1    2013-10-08 00:00:00.000       10 
2  1    2013-10-08 00:23:00.000       15 
3  1    2013-10-08 01:00:00.000       20    
4  1    2013-10-08 01:15:00.000       25 
5  1    2013-10-08 01:30:00.000       30 
6  1    2013-10-08 01:35:00.000       30 
7  1    2013-10-08 01:50:00.000       30 
8  1    2013-10-08 01:55:00.000       30 

通过构造一个新列,指定每一批的开始时间,在每一刻钟内以固定批次进行批处理:

SELECT
    *,
    CASE
        WHEN (DATEPART(minute, [Date]) >= 0 AND DATEPART(minute, [Date]) < 15) THEN DATETIMEFROMPARTS (DATEPART(year, [Date]), DATEPART(month, [Date]), DATEPART(day, [Date]), DATEPART(hour, [Date]), 0, 0, 0)
        WHEN (DATEPART(minute, [Date]) >= 15 AND DATEPART(minute, [Date]) < 30) THEN DATETIMEFROMPARTS (DATEPART(year, [Date]), DATEPART(month, [Date]), DATEPART(day, [Date]), DATEPART(hour, [Date]), 15, 0, 0)
        WHEN (DATEPART(minute, [Date]) >= 30 AND DATEPART(minute, [Date]) < 45) THEN DATETIMEFROMPARTS (DATEPART(year, [Date]), DATEPART(month, [Date]), DATEPART(day, [Date]), DATEPART(hour, [Date]), 30, 0, 0)
        ELSE DATETIMEFROMPARTS (DATEPART(year, [Date]), DATEPART(month, [Date]), DATEPART(day, [Date]), DATEPART(hour, [Date]), 45, 0, 0)
    END AS BatchStart
FROM
    Fact
ORDER BY
    [Date]

这将四舍五入到最接近的15分钟

SELECT dateadd(minute, datediff(minute, 0, Date)/15*15, 0) 
FROM yourtable

请发布您的预期输出。您有什么时间维度表?它们不会被使用吗?
SELECT dateadd(minute, datediff(minute, 0, Date)/15*15, 0) 
FROM yourtable