-1

データ フィードを通じてベンダーから受け取った生データ (重複データも含む) を含むウェアハウス ファクト テーブルを使用しています。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 
4

2 に答える 2

0

これは、最も近い 15 分に切り捨てられます

SELECT dateadd(minute, datediff(minute, 0, Date)/15*15, 0) 
FROM yourtable
于 2015-03-05T08:34:25.060 に答える
0

各バッチの開始を指定する新しい列を作成することにより、15 分の 1 時間ごとに固定バッチでバッチ処理します。

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]

あなたの例の結果:

ID  key  Date                     Value  BatchStart
1   1    2013-10-08 00:00:00.000  10     2013-10-08 00:00:00.000
2   1    2013-10-08 00:23:00.000  15     2013-10-08 00:15:00.000
3   1    2013-10-08 01:00:00.000  20     2013-10-08 01:00:00.000
4   1    2013-10-08 01:15:00.000  25     2013-10-08 01:15:00.000
5   1    2013-10-08 01:30:00.000  30     2013-10-08 01:30:00.000
6   1    2013-10-08 01:35:00.000  30     2013-10-08 01:30:00.000
7   1    2013-10-08 01:50:00.000  30     2013-10-08 01:45:00.000
8   1    2013-10-08 01:55:00.000  30     2013-10-08 01:45:00.000
于 2015-03-05T08:19:54.157 に答える