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

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

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

解決済

3回答

7409閲覧

SQLで週ごと時系列で集計したい

退会済みユーザー

退会済みユーザー

総合スコア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に必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2019/02/01 01:32

編集2019/02/01 02:00

SELECT
A.配布年月日,
Count(A.サンプル番号)

FROM
SAMPLE A

Where
A.配布年月日 between '20170101' and '20181231'

group by
A.配布年月日

上記のように、SAMPLEテーブルより、配ったサンプル数をカウントし、
日別で集計しているSQLがあります。

こちらを、月曜~日曜で週ごとの時系列で集計したいのですが、何か方法はありますでしょうか?
SQLは初心者です。

項目名は、月曜日の日付を表示させるようにできればなお良いです。
よろしくお願いいたします。

SAMPLEテーブル内容
・配布年月日(文字列の8桁)
・サンプル番号(文字列の6桁)
・配布者氏名
・配布サンプル名
・アンケート有無(有/無)

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

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

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

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

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

Orlofsky

2019/02/01 01:36

質問にCREATE TABLE文も載せてください。
退会済みユーザー

退会済みユーザー

2019/02/01 01:48

ありがとうございます。 PostgreSQL です。 CREATE TABLE文とは、テーブルの内容でよろしいでしょうか・・? ・配布年月日(文字列の8桁) ・サンプル番号(文字列の6桁) ・配布者氏名 ・配布サンプル名 ・アンケート有無(有/無)
Orlofsky

2019/02/01 01:55

質問に追加してください。PostgreSQLはタグで追加。修正依頼はきちんと読んでください。
m.ts10806

2019/02/01 05:14

>CREATE TABLE文 回答者も質問者さんと同じような状態を再現して調整するのが的確な回答への早道となります。 そのためには「テーブルの定義が分かる情報」が必要となるのですが、単に文字情報で提示されただけだと、その文字情報を読み解いて自分でDBのテーブルやデータを作らなければなりません。齟齬が発生する可能性もありますし非常に手間です。 最も確実なのが「質問者さんがそのテーブルを作ったときのSQL」ですね。それがCREATE TABLE文です。あくまでSQLベースの話です。サンプルデータのINSERT文もあればなお良しです。
guest

回答3

0

ベストアンサー

配布年月日が文字列だと使いづらいから、
Date型とかTimestamp型に直す前提で
週ごとの日付範囲をgenerate_series()使う案をおすすめしたい。

generate_seriesのちょっとしたTIPS - シュンツのつまづき日記

インターバルを'7 days'にでもすれば正しく1週間ずつ離れた日付データを生成できるので、

select s.a as "from", s.a + '7 days'::interval as "to" from ( select * from generate_series('2018-01-01'::timestamp, '2019-01-31'::timestamp, '7 days') ) as s(a)

とかやってみればいいんじゃないかな。

fromとtoが重なるのが嫌なら、

select s.a as "from", s.a + '7 days'::interval + '-1 second'::interval as "to" from ( select * from generate_series('2018-01-01'::timestamp, '2019-01-31'::timestamp, '7 days') ) as s(a)

って手もありますし。

投稿2019/02/01 02:40

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/02/01 05:26

ありがとうございます、やってみます!!
guest

0

日付に当てはまるISO 8601週番号年 が使えるデータ型にテーブルを変更することも考えましょう。

投稿2019/02/01 01:58

Orlofsky

総合スコア16415

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

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

退会済みユーザー

退会済みユーザー

2019/02/01 02:05

こんな便利な早見表があるんですね! ぜひ利用しようと思います、ありがとうございます!
guest

0

まず想定するSQLの種類を限定したほうがよいでしょう
特に日付から曜日を抜き出すような関数は多少ブレがあります。

また配布年月日は「年月日」のわりに日が抜けているように見えます。
型は何を想定しているのでしょうか?

端的に言えば、曜日で集計すること前提としたテーブルであれば
最初から、曜日用のカラムを作っておくことをお勧めします

投稿2019/02/01 01:37

yambejp

総合スコア114814

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

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

退会済みユーザー

退会済みユーザー

2019/02/01 02:02

回答ありがとうございます。 配布年月日、失礼いたしました、日が抜けておりました。 曜日用のカラムを作るという案、それなら私にもできそうなのでやってみます。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問