1

ある時点での変数名とその値のリストを返す TSQL クエリがあります。現在、日時列を切り捨てて、分単位の結果セットを提供しています。

必要なデータの間隔を指定できると、非常に便利です。x 秒ごと、x 分ごと、または x 時間ごと。

選択した値を集計したくないので、GROUP BY できません。

これが私の現在のクエリです:

SELECT time, var_name, value
FROM (
    SELECT time, var_name, value, ROW_NUMBER() over (partition by var_id, convert(varchar(16), time, 121) order by time desc) as seqnum
    FROM var_values vv 
    JOIN var_names vn ON vn.id = vv.tag_id
    WHERE ( var_id = 1 OR var_id = 2)
        AND time >= '2013-06-04 00:00:00' AND time < '2013-06-04 16:20:17'
) k
WHERE seqnum = 1
ORDER BY time;

そして結果セット:

2013-06-04 00:20:52.847     Random.Boolean   0
2013-06-04 00:20:52.850     Random.Int1      76
2013-06-04 00:21:52.893     Random.Boolean   1
2013-06-04 00:21:52.897     Random.Int1      46
2013-06-04 00:22:52.920     Random.Boolean   1
2013-06-04 00:22:52.927     Random.Int1      120

また、完成させるために、結果セットに必要な var_id を選択するために WHERE 句を変更する機能を保持したいと考えています。

4

1 に答える 1

2

UNIXタイムスタンプを必要な間隔で割った秒数で分割できるはずです。

(PARTITION BY var_id, DATEDIFF(SECOND,{d '1970-01-01'}, time) / 60  -- 60 seconds
 ORDER BY TIME DESC) AS seqnum

この計算では、60 秒間同じ結果が得られ、間隔内のすべての行が同じパーティション内に配置されます。

于 2013-06-04T16:55:08.197 に答える