flgが切り替わるタイミングで期間を集計するselect文を作成したいと思っております。
<使用環境>
postgreSQL12
windows10
sql
1CREATE TABLE tr_machine_error ( 2 id integer, 3 code VARCHAR(3), 4 flg integer, 5 start_dt DATETIME, 6 stop_dt DATETIME 7);
id | code | flg | start_dt | stop_dt |
---|---|---|---|---|
1 | S01 | 1 | 2020/11/17 12:00:00 | 2020/11/17 13:00:00 |
2 | S01 | 0 | 2020/11/17 12:10:00 | 2020/11/17 13:10:00 |
3 | S01 | 0 | 2020/11/17 12:20:00 | 2020/11/17 13:20:00 |
4 | S01 | 1 | 2020/11/17 13:10:00 | 2020/11/17 13:30:00 |
5 | S01 | 0 | 2020/11/17 13:20:00 | 2020/11/17 13:40:00 |
6 | S01 | 0 | 2020/11/17 13:30:00 | 2020/11/17 13:50:00 |
7 | S01 | 1 | 2020/11/17 14:30:00 | 2020/11/17 15:10:00 |
8 | S01 | 0 | 2020/11/17 14:40:00 | 2020/11/17 15:20:00 |
というようなデータがあるとして
flgが1になったタイミングのstart_dtと、1に切り替わる直前のレコードの
stop_dtを抽出し、集計させるselect文を作成したいと思っております。
実際抽出したいdatetimeについては太字にしてあります。
出力したい結果
id | code | flg | start_dt | stop_dt |
---|---|---|---|---|
1 | S01 | 1 | 2020/11/17 12:00:00 | 2020/11/17 13:20:00 |
4 | S01 | 1 | 2020/11/17 13:10:00 | 2020/11/17 13:50:00 |
7 | S01 | 1 | 2020/11/17 14:30:00 | 2020/11/17 15:20:00 |
上記のような集計をすることは可能なのでしょうか。
分析関数?lagなどを使って行おうと思ったのですが、SQLが捻出できず
お力添えいただければ幸いです。
※最後のレコードが0で終わる場合には、そのレコードのstop_dtの値を
抽出させたいです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/18 13:41
2021/07/18 13:52
2021/07/18 22:19
2021/07/19 00:19