teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

追記

2018/12/14 04:26

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -9,4 +9,18 @@
9
9
  ```
10
10
  ~~因みに、参考にしているSQLですが、NOW()を正時に変更していますが、Date型だとそれは不要です。
11
11
  記述を簡潔にすると以下の様になります。~~
12
- 実行時の時間を軸にしているようなので、取り下げ
12
+ ~~実行時の時間を軸にしているようなので、取り下げ~~
13
+ ついでに、元のSQLを簡潔にすると
14
+ ```SQL
15
+ select dt.datetime
16
+ , count(his.id)
17
+ from generate_series(
18
+ TO_CHAR(NOW(), 'YYYY/MM/DD HH24:00:00'):: timestamp + INTERVAL '-3 day',
19
+ TO_CHAR(NOW(), 'YYYY/MM/DD HH24:00:00'):: timestamp,
20
+ '1 hour'
21
+ ) as dt(datetime)
22
+ left join t_history as his
23
+ on his.end_timestamp>= dt.datetime and his.end_timestamp< (dt.datetime + INTERVAL '1 hour')
24
+ group by dt.datetime
25
+
26
+ ```

5

修正

2018/12/14 04:26

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  指定した日付の5分間隔のタイムテーブルを基準に、`t_history`の`regist_timestamp`と結合してカウントします。
2
2
  ```SQL
3
3
  select dt.datetime
4
- , count(his.regist_timestamp)
4
+ , count(his.id)
5
5
  from generate_series('2018/12/12'::timestamp, '2018/12/12'::timestamp + INTERVAL '1 day', '5 minute') as dt(datetime)
6
6
  left join t_history as his
7
7
  on his.regist_timestamp >= dt.datetime and his.regist_timestamp < (datetime + INTERVAL '5 minute')

4

修正

2018/12/14 02:26

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -2,12 +2,9 @@
2
2
  ```SQL
3
3
  select dt.datetime
4
4
  , count(his.regist_timestamp)
5
- from (
6
- select datetime, datetime + interval '5 minute' as dtend
7
- from generate_series('2018/12/12'::timestamp, '2018/12/12'::timestamp + INTERVAL '1 day', '5 minute') as dt(datetime)
5
+ from generate_series('2018/12/12'::timestamp, '2018/12/12'::timestamp + INTERVAL '1 day', '5 minute') as dt(datetime)
8
- ) dt
9
6
  left join t_history as his
10
- on his.regist_timestamp >= dt.datetime and his.regist_timestamp < dtend
7
+ on his.regist_timestamp >= dt.datetime and his.regist_timestamp < (datetime + INTERVAL '5 minute')
11
8
  group by dt.datetime
12
9
  ```
13
10
  ~~因みに、参考にしているSQLですが、NOW()を正時に変更していますが、Date型だとそれは不要です。

3

修正

2018/12/14 02:24

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -2,9 +2,12 @@
2
2
  ```SQL
3
3
  select dt.datetime
4
4
  , count(his.regist_timestamp)
5
+ from (
6
+ select datetime, datetime + interval '5 minute' as dtend
5
- from generate_series('2018/12/12'::timestamp, '2018/12/12'::timestamp + INTERVAL '1 day', '5 minute') as dt(datetime)
7
+ from generate_series('2018/12/12'::timestamp, '2018/12/12'::timestamp + INTERVAL '1 day', '5 minute') as dt(datetime)
8
+ ) dt
6
9
  left join t_history as his
7
- on his.regist_timestamp >= dt.datetime and his.regist_timestamp < (dt.datetime + INTERVAL '6 minute')
10
+ on his.regist_timestamp >= dt.datetime and his.regist_timestamp < dtend
8
11
  group by dt.datetime
9
12
  ```
10
13
  ~~因みに、参考にしているSQLですが、NOW()を正時に変更していますが、Date型だとそれは不要です。

2

修正

2018/12/14 02:21

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -4,16 +4,9 @@
4
4
  , count(his.regist_timestamp)
5
5
  from generate_series('2018/12/12'::timestamp, '2018/12/12'::timestamp + INTERVAL '1 day', '5 minute') as dt(datetime)
6
6
  left join t_history as his
7
- on his.regist_timestamp between dt.datetime and (dt.datetime + INTERVAL '5 minute')
7
+ on his.regist_timestamp >= dt.datetime and his.regist_timestamp < (dt.datetime + INTERVAL '6 minute')
8
8
  group by dt.datetime
9
9
  ```
10
- 因みに、参考にしているSQLですが、NOW()を正時に変更していますが、Date型だとそれは不要です。
10
+ ~~因みに、参考にしているSQLですが、NOW()を正時に変更していますが、Date型だとそれは不要です。
11
- 記述を簡潔にすると以下の様になります。
11
+ 記述を簡潔にすると以下の様になります。~~
12
- ```SQL
13
- select dt.datetime
14
- , count(his.end_timestamp)
12
+ 実行時の時間を軸にしているようなので、取り下げ
15
- from generate_series(current_date + INTERVAL '-3 day', current_date, '1 hour') as dt(datetime)
16
- left join t_history as his
17
- on his.end_timestamp between (dt.datetime + INTERVAL '-3 day') and dt.datetime
18
- group by dt.datetime
19
- ```

1

修正

2018/12/14 02:10

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,10 +1,10 @@
1
- 指定した日付の5分間隔のタイムテーブルを基準に、`t_history`の`end_timestamp`と結合してカウントします。
1
+ 指定した日付の5分間隔のタイムテーブルを基準に、`t_history`の`regist_timestamp`と結合してカウントします。
2
2
  ```SQL
3
3
  select dt.datetime
4
- , count(his.end_timestamp)
4
+ , count(his.regist_timestamp)
5
5
  from generate_series('2018/12/12'::timestamp, '2018/12/12'::timestamp + INTERVAL '1 day', '5 minute') as dt(datetime)
6
6
  left join t_history as his
7
- on his.end_timestamp between dt.datetime and (dt.datetime + INTERVAL '5 minute')
7
+ on his.regist_timestamp between dt.datetime and (dt.datetime + INTERVAL '5 minute')
8
8
  group by dt.datetime
9
9
  ```
10
10
  因みに、参考にしているSQLですが、NOW()を正時に変更していますが、Date型だとそれは不要です。