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

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

新規登録して質問してみよう
ただいま回答率
85.35%
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

解決済

1回答

1371閲覧

SQLのSELECT文で月単位の結果を取得したいです。

Anpai

総合スコア27

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クリップ

投稿2020/09/15 15:29

編集2020/09/16 14:48

postgresqlテーブルから月単位で結果を取得したいです。

例えば、テーブル内に
|date |value|
|2020/01/04|10|
|2020/01/11|20|
|2020/01/18|30|
|2020/01/25|40|
|2020/02/01|50|
|2020/02/08|60|
|2020/02/15|70|
|2019/01/22|80|
|2019/01/29|50|
|2019/01/30|50|
|2019/02/22|80|
|2019/02/29|50|
|2019/02/30|50|
|2018/01/22|80|
|2018/01/29|50|
|2018/01/30|50|
|2018/02/22|80|
|2018/02/29|50|
|2018/02/30|50|

というテーブルに対して1月のデータを結果を取得するといった処理を行いたいです。

SQL

1SELECT * FROM テーブル WHERE ???

のWhere部に記載する内容を知りたいです。
このSQLを投げると
|date |value|
|2020/01/04|10|
|2020/01/11|20|
|2020/01/18|30|
|2020/01/25|40|
|2019/01/22|80|
|2019/01/29|50|
|2019/01/30|50|
|2018/01/22|80|
|2018/01/29|50|
|2018/01/30|50|

date列は「date」、value列は「smallint」
になります。

よろしくお願いします。

テーブルのCREATE文は
create table table_a (
date date not null
, value smallint not null
, primary key (date)
);
になります。

現在調べた範囲では、日付型は「BETWEEN ? AND ?」や不等号を使った判定が良いということはわかりましたが、月単位で同じかどうかを調べる方法を知りたいため、記載しました。

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

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

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

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

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

gentaro

2020/09/15 15:41

最低限「調べたこと」「試したこと」ぐらいは書きましょう。 現状ではただの丸投げにしか見えません。
tr_09

2020/09/15 17:01

純粋に1月のデータだけ欲しいのであればlikeで検索で良さそうです
m.ts10806

2020/09/15 22:48

テーブル定義をCREATE TABLE文でご提示ください。
guest

回答1

0

ベストアンサー

月の1日と比較するのが簡単です。

SQL

1SELECT * FROM テーブル 2where date >= '2020/01/01'::date 3 and date < '2020/02/01'::date

上記を同じ月を元にするもので書き換えると以下になります。

SQl

1SELECT * FROM テーブル 2where date >= '2020/01/01'::date 3 and date < '2020/01/01'::date + interval '1 month'

投稿2020/09/15 17:52

sazi

総合スコア25327

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

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

Anpai

2020/09/18 13:06

'2018/01/01'::date < date AND date < '2018/01/01'::date + interval '1 month') OR '2019/01/01'::date < date AND date < '2019/01/01'::date + interval '1 month') OR '2020/01/01'::date < date AND date < '2020/01/01'::date + interval '1 month') と記載し処理を行うことができました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問