回答編集履歴

2

調整

2022/06/07 01:24

投稿

yambejp
yambejp

スコア117780

test CHANGED
@@ -9,3 +9,32 @@
9
9
  FROM information_schema.COLUMNS
10
10
  where @a<='2022-06-01 10:00:00'
11
11
  ```
12
+
13
+ # テーブルのサンプル
14
+ ```SQL
15
+ create table test01
16
+ (
17
+ cal_time datetime, # 計測時間
18
+ data real, # データ
19
+ data_id int, # データid
20
+ cal_time2 varchar(20) as (cal_time - interval minute(cal_time) minute - interval second(cal_time) second),
21
+ index(cal_time2)
22
+ );
23
+
24
+ insert into test01(cal_time,data,data_id) values
25
+ ('2022-06-06 0:00:00',1.001,0),
26
+ ('2022-06-06 0:01:00',1.003,0),
27
+ ('2022-12-01 0:00:00',2.005,0),
28
+ ('2022-06-06 0:00:00',2.001,1),
29
+ ('2022-06-06 0:01:00',2.003,1),
30
+ ('2022-12-01 0:00:00',1.005,1),
31
+ ('2022-06-06 0:00:00',3.001,2),
32
+ ('2022-06-06 1:01:00',1.001,1),
33
+ ('2022-06-06 2:05:00',1.002,1),
34
+ ('2022-06-06 2:10:00',1.003,2);
35
+ ```
36
+ 上記cal_time2が時間単位のデータになっているのでそれをキーに集計すればそこそこ効率的です
37
+ ```SQL
38
+ select cal_time2,count(*) from test01
39
+ group by cal_time2
40
+ ```

1

さんこう

2022/06/06 08:41

投稿

yambejp
yambejp

スコア117780

test CHANGED
@@ -1,3 +1,11 @@
1
1
  information_schema.columnsを利用して範囲を指定して等間隔の表を入手し
2
2
  元テーブルの方は生成列をつくってインデックスを貼っておいて処理すれば
3
3
  効率的に集計できると思います
4
+
5
+ # 参考
6
+ 2022-06-01 1時から10時まで1時間ごとのdatetime
7
+ ```SQL
8
+ SELECT (select @a := @a + interval 1 hour from (select @a:='2022-06-01 0:00:00') as dummy) AS tm
9
+ FROM information_schema.COLUMNS
10
+ where @a<='2022-06-01 10:00:00'
11
+ ```