日時範囲でグループ化された最大値の取得について質問~

memai
2014-04-14 17:53 1658 1
任意の時刻にデータをモニタリングしているシステムがあり、データがMS SQL Serverに保存されています。

int ID
int DeviceID 端末番号
int DeviceValue 計測値
smalldatetime DeviceTime 日時

これを、任意の日時範囲を指定し、一日単位で集計された、端末ID、計測値の最大値という形式で取得したく思います。

計測日 端末番号 計測最大値
2014/01/01 10002 34543
2014/01/01 10003 33211
2014/01/02 10002 23450
...
...

DBが得意でないため、困っています。
どなたかお助けいただけないでしょうか?

コメント

2014年 04月 22日 (18:38)
こんにちは。
イノ(inno)です。

下記に例文のSQLを作成しましたので、テストしてみてください。
GROUP BYを使えば簡単にできます。

-- テストテーブル作成
CREATE TABLE dbo.TempData
(
ID int
, DeviceID int
, DeviceValue int
, DeviceTime smalldatetime
)

-- テストデータ登録
INSERT INTO dbo.TempData
SELECT 1, 10002, 34543, '2014/01/01 10:00' UNION ALL
SELECT 2, 10003, 33211, '2014/01/01 10:00' UNION ALL
SELECT 3, 10002, 23450, '2014/01/01 11:00' UNION ALL
SELECT 4, 10003, 35000, '2014/01/01 11:00' UNION ALL
SELECT 5, 10002, 32323, '2014/01/02 10:00' UNION ALL
SELECT 6, 10003, 53453, '2014/01/02 10:00' UNION ALL
SELECT 7, 10002, 23235, '2014/01/02 11:00' UNION ALL
SELECT 8, 10003, 65655, '2014/01/02 11:00' UNION ALL
SELECT 9, 10002, 12134, '2014/01/03 10:00' UNION ALL
SELECT 10, 10003, 42232, '2014/01/03 10:00' UNION ALL
SELECT 11, 10002, 22334, '2014/01/03 11:00' UNION ALL
SELECT 12, 10003, 34313, '2014/01/03 11:00'

-- 結果SQL
SELECT CONVERT(CHAR(10), DeviceTime, 111) AS DeviceTime, DeviceID, MAX(DeviceValue) AS MaxDeviceValue
FROM dbo.TempData
WHERE DeviceTime >= '2014/01/01' AND DeviceTime < '2014/01/03'
GROUP BY CONVERT(CHAR(10), DeviceTime, 111), DeviceID
ORDER BY CONVERT(CHAR(10), DeviceTime, 111), DeviceID

-- 実行結果
DeviceTime DeviceID MaxDeviceValue
2014/01/01 10002 34543
2014/01/01 10003 35000
2014/01/02 10002 32323
2014/01/02 10003 65655