5

タイムスタンプ列を持つテーブルがあります。識別子列 (例: cusip) でグループ化し、別の列 (例: 数量) で合計できるようにしたいと考えていますが、互いに 30 秒以内の行、つまり固定の 30 秒のバケット間隔ではありません。与えられたデータ:

       カシップ| 数量| タイムスタンプ
============|=========|=============
BE0000310194| 100| 16:20:49.000
BE0000314238| 50| 16:38:38.110
BE0000314238| 50| 16:46:21.323
BE0000314238| 50| 16:46:35.323

以下を返すクエリを書きたいと思います。

       カシップ| 量
============|=========
BE0000310194| 100
BE0000314238| 50
BE0000314238| 100

編集:さらに、クエリからMIN(タイムスタンプ)も取得できれば、物事が大幅に簡素化されます。

4

3 に答える 3

0

以下はあなたに役立つかもしれません。

所定の時間を表す 30 秒のピリオドのグループ化。ここでは「2012-01-01 00:00:00」です。DATEDIFF は、タイムスタンプ値と開始時刻の間の秒数をカウントします。次に、それを 30 で割ってグループ化列を取得します。

SELECT MIN(TimeColumn) AS TimeGroup, SUM(Quantity) AS TotalQuantity FROM YourTable
GROUP BY (DATEDIFF(ss, TimeColumn, '2012-01-01') / 30)

ここでは、各グループの最小タイム スタンプが TimeGroup として出力されます。ただし、最大値またはグループ化列の値を使用して、表示のために再度時間に変換できます。

于 2012-11-07T05:43:24.543 に答える