質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Hive

Hiveとは、Hadoop(オープンソースの大規模分散計算フレームワーク)の上で動作するDWH(Data Warehouse:データウエアハウス)向けのプロダクトです。HiveQLというSQLのような言語で、Hadoop上のデータを操作することができます。

Q&A

解決済

3回答

4233閲覧

SQL 値がない場合に、それより前の値で埋めたい

Satomi07

総合スコア24

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Hive

Hiveとは、Hadoop(オープンソースの大規模分散計算フレームワーク)の上で動作するDWH(Data Warehouse:データウエアハウス)向けのプロダクトです。HiveQLというSQLのような言語で、Hadoop上のデータを操作することができます。

0グッド

2クリップ

投稿2020/09/01 11:02

編集2020/09/01 11:36

並び順はcolumn1にtimestampがあり、これを使えます。
そして、timestampが30分以上空いた場合、column2に新しい値が振られます。

このようにして求めた、column2に、歯抜けになった部分があり、NULLの部分を、その前の値で埋めたいです。
SQLでどのようにすれば埋められるでしょうか…書き方を教えてください。
※MySQLか、最終的にはHiveでやりたいです。

<Before> column1 column2 08:00:00 AA12345 08:00:02 NULL 08:00:05 NULL 08:00:07 NULL 12:11:00 BB12345 12:11:02 NULL 12:11-04 NULL ・ ・ ・ <After> column1 column2 08:00:00 AA12345 08:00:02 AA12345 08:00:05 AA12345 08:00:07 AA12345 12:11:00 BB12345 12:11:02 BB12345 12:11-04 BB12345



yambejp様、ありがとうございます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/09/01 11:23 編集

SQLの種類とバージョンはなんでしょう。 また並び順を確定することはできるのでしょうか? 元来SQLはorder by しないかぎり並び順が確定されないものです。 また、先頭のデータがNULLだった場合どうするつもりでしょう?
Satomi07

2020/09/01 11:37

order byして穴埋めでしょうか…勉強します、ありがとうございます、もしよければもう少し教えてください。
Satomi07

2020/09/01 11:57

先頭のデータは前の値(NULL)との差分が30分以上空くので、NULLになりません。
guest

回答3

0

ベストアンサー

sql

1select c1,(SELECT @a:=coalesce(c2,@a) FROM (SELECT @a:='') AS sub) as c2 from tbl order by c1

投稿2020/09/02 00:34

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/09/02 01:33 編集

おお、これは早そうですね。 初期化のテクニックとか勉強になります。 ただ、HIVEでは変数は使えなさそうですが。
yambejp

2020/09/02 00:53 編集

30分以内で必ず振られるという条件があるならこうします。 元の回答は連続性があるデータにしか対応できませんが、これならwhere句で 範囲を制限することもできます select c1,c2, coalesce(c2,(select c2 from tbl where c1=(select max(c1) from tbl where c1 between t1.c1 - interval 30 minute and t1.c1 and c2 is not null))) as c2r from tbl as t1 where c1>'08:00:05'
Satomi07

2020/09/04 09:28

おおお、ありがとうございます。 本当に助かります。 自分で連番を振ってみましたが、このほうがスマートです。
guest

0

並びを特定するものが無ければ無理です。
単に情報不足なら質問に追記して下さい。

並びを特定する項目が無いなら、そのテーブルにオートナンバーを付加したテーブルを準備して追加すると、上手く行けば見た目上の並びでオートナンバーが振られるかもしれません。

追記

未検証です。
column1はユニークであることが前提です。
低速な場合はせめてcolumn1のインデックスを作成して下さい。

SQL

1select b3.column1, coalesce(b4.column2, b5.column2) column2 2from ( 3 select b1.column1, max(b2.column1) as b2_column1 4 from before b1 left join before b2 5 on b1.column1 > b2.column 6 and b2.column2 is not null 7 group by b1.column1 8 ) b3 9 inner join before b4 10 on b3.column1 = b4.column1 11 left join before b5 12 on b3.b2_column1 = b5.column1

投稿2020/09/01 11:28

編集2020/09/01 12:31
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Satomi07

2020/09/01 11:38

追記いたしましたtimestampがあります。
Satomi07

2020/09/04 09:27

ありがとうございます。こんなに素早い回答、頭のいい人がたくさんいますね。 おかげさまで、一山超えられました。本当に感謝いたします。
guest

0

SQLはORDER BYで出力順を明示しない限り表示される順序は保証されません。
だから、質問で実現したいことは無理です。Excelのイメージとは違います。
他にORDER BYで出力順を明示できるカラムを追加しては?

なお、同じSQLでもデータベースやそのバージョンによって方言が大きいですから、どのデータベースを使うのかを質問のタグで示したり、バージョンも明記した方が適切なコメントが付き易いです。SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう!

投稿2020/09/01 11:22

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Satomi07

2020/09/01 11:38

MySQL,最終的にはHiveでやりたいです。
Satomi07

2020/09/04 23:59

ありがとうございます。おっしゃる通りですね。 ROW NUMBERを振りました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問