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

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

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

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

SQL

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

Q&A

解決済

2回答

89閲覧

SQLで複数のデータを1つのデータとして扱う方法

---stax---

総合スコア148

PostgreSQL

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

SQL

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

0グッド

0クリップ

投稿2017/10/15 14:48

表題の件で質問させて頂きます。
postgreSQLを使用しています。

あるデータベースに
18:00:00
18:01:00
18:02:00
18:03:00
のように1分刻みのデータがあるとします。
これを18時という1つのデータとして扱う事は可能でしょうか?
この18時というデータの中に
18:00:00
18:01:00
18:02:00
18:03:00
というデータが格納されているイメージです。
DISTINCTでは消去してしまうので目的とは違うため、もし他のやり方があればアドバイス頂きたいです。

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

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

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

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

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

guest

回答2

0

下記のようにするといかがでしょうか。

sql

1-- CREATE TABLE times (value time); 2-- INSERT INTO times VALUES ('18:00:00'), ('18:01:00'), ('18:02:00'), ('18:03:00'), ('19:00:00'), ('19:01:00'); 3 4SELECT DATE_TRUNC('hour', value) AS hour, ARRAY_AGG(value) AS values FROM times GROUP BY DATE_TRUNC('hour', value); 5 6 hour | values 7----------+--------------------------------------- 8 18:00:00 | {18:00:00,18:01:00,18:02:00,18:03:00} 9 19:00:00 | {19:00:00,19:01:00} 10(2 rows)

投稿2017/10/15 15:46

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

リレーショナルデータベースから取り出した結果は、平たくいうとただの「表」なので、「○○の中に△△」といった構造を持たせることはできません。

それはデータベースからデータを取得したアプリケーションで行うべき処理です。

データベースからデータを取り出すときに、データをまとめる「キー」として日時を to_char() 関数で時(hour)単位に丸めたカラムを追加してもよいかもしれません。

sql

1SELECT to_char(jikan, 'yyyy/mm/dd hh24') AS 時刻, jikan, atai FROM hoge;

一方で一時間ごとの合計値や、最大・最小・平均値などの集計を行いたい場合は、GROUP BY および集計関数を使うと実現できます。

sql

1# 毎時の最大値を出すクエリ 2SELECT to_char(jikan, 'yyyy/mm/dd hh24') AS 時刻, sum(atai) AS 合計 FROM hoge GROUP BY 時刻;

投稿2017/10/15 15:40

miyahan

総合スコア3095

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問