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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

SQL

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

解決済

【SQL全般】SQLを使って条件に一致した1つ前のレコードを収集したい。

musyoku
musyoku

総合スコア2

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

SQL

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

2回答

0グッド

0クリップ

281閲覧

投稿2022/12/02 06:54

編集2022/12/02 07:28

前提

Google Apps Script(GAS)を使ってます。GASのQuery関数を使ってシートにあるデータから意図するレコードを抜き出したいです。ただ聞きたい事は一般的なSQL文の作り方の話なのでGASのQuery関数をSQLServerなど通常のSQLでの話と捉えて大丈夫です。

実現したいこと

「num列が2以上の場合その1つ前のレコードを抽出したい」

下記の例だとidが4と5のnumが2以上なのでidが3と4のレコードを取得したいです。
※先頭はカラム名です。

id/name/num
1/AAA/2.1
2/BBB/1.8
3/CCC/1.5
4/DDD/2.4
5/EEE/3
・・/・・/・・
100000/あああ/1.1

補足説明
・idは1から連番です。
・idが1もnum2以上ですが、その場合(その上にレコードが無いので)は取得しない想定です。
・全件取得後forでループさせれば取得できそうですが、実際は数万件以上データがありループだと処理に時間がかかりそうなので可能ならばSQLでデータを取得できればと思います。実現可能でしょうか?

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

YAmaGNZ

2022/12/02 07:18

idは1からの連番なのですか? また、id=1もnumが2以上ですがこの場合どうなるのですか?
musyoku

2022/12/02 07:22

>idは1からの連番なのですか? idは1から連番です。 >また、id=1もnumが2以上ですがこの場合どうなるのですか? その上のレコードが無いので取得しないです。 質問内容を質問文に記載いたします。
YAmaGNZ

2022/12/02 10:45

実行するのは「スプレッドシートのQuery関数を使って」なのですよね? そうなるとSQLServer等で使えるSQLとだいぶ差があると思うのですが一般的なSQLでいいんですかね?
KOZ6.0

2022/12/02 11:56

んー?と思ってググったら Cloud SQL というのがあって、SQLServer や MySQL, PostgreSQL が使えるようです。
musyoku

2022/12/03 07:19

具体的に通常のSQLとQuery関数でできる差は把握していないですが、Query関数が無料でSQLっぽく扱える関数なので利用したかったんです。Cloud SQLもありますが従量課金で使用する形のなのでQuery関数で代替できないかなと思い質問しました。

回答2

1

ベストアンサー

ざっくり

SQL

1create table tbl (id int ,name varchar(10),num float); 2insert into tbl values 3(1,'AAA',2.1), 4(2,'BBB',1.8), 5(3,'CCC',1.5), 6(4,'DDD',2.4), 7(5,'EEE',3); 8 9 10select t1.* from tbl as t1 11inner join tbl as t2 12on t2.num>=2 and t1.id=t2.id-1

投稿2022/12/02 09:32

yambejp

総合スコア108937

spoofy_dragon👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

yambejp

2022/12/02 09:39

連番が担保されている前提
musyoku

2022/12/03 07:21

SQLならこれで対象のデータを抽出できそうです!!INNER JOINでID-1の考えはありませんでした。これをQUERY関数で実現できるか実装してみます。ありがとうございました。

0

SELECT A-1 WHERE C >= 2
みたいな感じで一旦numが2以上のidから1引いた値を列挙して
"SELECT * WHERE A MATCHES '^("& JOIN("|",E1:E11)&")$'"
と列挙したidを検索してはどうでしょう?

投稿2022/12/02 08:33

YAmaGNZ

総合スコア9439

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

musyoku

2022/12/03 07:25

QUERY関数での実装方法を書いて下さりありがとうございます。MATCHES以下の記載がまだ理解できていませんが、この書き方を踏まえて実装してみます。ありがとうございました。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

SQL

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