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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

Amazon Redshift

Amazon Redshiftは、Amazon社が提供する 高速かつ完全マネージド型でペタバイト規模の クラウドデータウェアハウスサービスです。

Q&A

解決済

1回答

9692閲覧

PSQLでのLOOP、変数、配列の使い方について。

退会済みユーザー

退会済みユーザー

総合スコア0

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

Amazon Redshift

Amazon Redshiftは、Amazon社が提供する 高速かつ完全マネージド型でペタバイト規模の クラウドデータウェアハウスサービスです。

0グッド

0クリップ

投稿2019/06/21 10:05

編集2019/06/21 10:50
namedate
aaa2018/5/21
bbb2018/5/21
ccc2018/5/21
ddd2018/5/21
eee2018/5/21
fff2018/5/22
ggg2018/5/22
hhh2018/5/22
iii2018/5/22
jjj2018/5/22

上記のようなテーブルがあり、PSQLを用いてdateごとに2つずつ値を取得して結合し、下記のようなテーブルを作成したいと考えております。
(これはサンプルデータで、本来は日付ごとに10000行あり、そのデータの最初の100件を結合するというコードを描きたいのですが、今回は単純化しています。)

namedate
aaa2018/5/21
bbb2018/5/21
fff2018/5/22
ggg2018/5/22

このようなテーブルを作成するためのコードをSQLを用いて描きたいのですがどのように書けば良いのでしょうか?擬似コードとしては以下のようなものになるかと想定しています。

アドバイスよろしくお願いします。

sql

1dates = select DISTINCT date from table order by date ASC <- 存在する日付を取得 2databases <- 空のテーブルを定義 3//日付ごとにマッチするものを取ってきて最初の2個を空のテーブルに結合していく 4for date in dates 5 databases 6 union 7 select * from table where date = date limit 2 8 9database ←それぞれの日付のデータが2こずつ 10

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

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

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

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

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

Orlofsky

2019/06/21 10:12

[Oracle Database]タグは削除してください。Oracleは関係ないです。
退会済みユーザー

退会済みユーザー

2019/06/21 10:50

すみません。修正しました
guest

回答1

0

ベストアンサー

一度配列として畳んで、2個だけを対象に再度配列を展開します。

SQL

1create table item_agg as 2select item_date, unnest(item_list[1:2]) as item 3from ( 4 select item_date, array_agg(item order by item) as item_list 5 from list 6 group by item_date 7 ) agg

DATA

1create table list(item text, item_date date); 2insert into list values 3 ('aaa','2018/5/21') 4,('bbb','2018/5/21') 5,('ccc','2018/5/21') 6,('ddd','2018/5/21') 7,('eee','2018/5/21') 8,('fff','2018/5/22') 9,('ggg','2018/5/22') 10,('hhh','2018/5/22') 11,('iii','2018/5/22') 12,('jjj','2018/5/22') 13;

日付ごとに10,000行あり、そのデータの最初の100件

というと、上記だと時間的に厳しいかもしれませんね。
以下は無名ブロックのpgsqlです。

SQL

1DO $$ DECLARE 2 wr record; 3BEGIN 4 drop table if exists item_agg; 5 create table item_agg(item text, item_date date); 6 for wr in select distinct item_date from list order by item_date 7 loop 8 insert into item_agg 9 select from list 10 where item_date=wr.item_date 11 order by item limit 100 12 ; 13 end loop; 14END$$

投稿2019/06/21 11:16

編集2019/06/21 11:44
sazi

総合スコア25300

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

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

退会済みユーザー

退会済みユーザー

2019/06/21 13:20

ありがとうございます!もしよろしければPSQLではなくMySQLだった場合の書き方も教えてもらいたいです????
sazi

2019/06/21 13:22

全然記述が違うので、別質問にされた方が、良い回答が期待できます。
退会済みユーザー

退会済みユーザー

2019/06/21 13:27

別で質問を立てたので、もしお時間ございましたら回答お願いいたします。
退会済みユーザー

退会済みユーザー

2019/06/21 16:07

こちらですが、array_aggの部分でsyntax error at or near "order" とエラーが出てしまいました。お時間ございましたら、ご教授お願いいたします。
sazi

2019/06/21 16:34

こちらではエラーにはなりませんので、記述を確認して下さい。 postgresですよね?
退会済みユーザー

退会済みユーザー

2019/06/21 17:01

PostgreSQLです。DbeaverのSQLエディタで記述し、実行したところSQL Error [42601]: ERROR: syntax error at or near "order"と表示されてしまいます。
sazi

2019/06/21 17:08 編集

postgresのバージョンは? 全角の空白が入っていたりしませんか?
退会済みユーザー

退会済みユーザー

2019/06/21 17:21

お時間とってしまい申し訳ございません。 PostgreSQL 8.0.2です。全角は入っておりません
sazi

2019/06/21 18:49

8.0だとarray_aggは使えませんので、pgsqlの方だけですね。
退会済みユーザー

退会済みユーザー

2019/06/22 02:20

そういうことでしたか^^;ありがとうございます。 array_aggが使えないとなると、どのように記述するのが良いのでしょうか?
sazi

2019/06/22 05:52

pgsql(最後の)方ですね。 こちらの方が枝打ちしているので高速だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問