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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

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回答

5316閲覧

指定した期間のみのデータを集計したい

pro-poke5

総合スコア46

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

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/04/21 07:07

編集2017/04/26 08:06

こんにちわ
sql初心者です
VS2010
DBはPostgres
です

指定した期間のみのデータをカウントしたいです

sql

1SELECT '" + shiteiyear + "' as TR_YEAR, COUNT(*) as TR_COUNT 2FROM tm_user_e 3WHERE '" + shitei + "' >= create_datetime 4AND member_type = '01' 5NOT in ('" + shitei + "' < update_datetime) 6

shiteiyear(string型)
shitei(date型)
はともに変数ですが、変数が入った状態のイメージとしては

sql

1SELECT '2012' as TR_YEAR, COUNT(*) as TR_COUNT 2FROM tm_user_e 3WHERE '2012-12-31' >= create_datetime 4AND member_type = '01' 5NOT in ('2012-12-31' < update_datetime)

このようになります
whereの条件のあとに、ここからここまでをとってくる期間を指定したいです
具体的な数字のイメージは

WHERE'2012-12-31' >= create_datetime
AND '2013-12-31' < create_datetime
のようになるにかなぁと考えていますが
(2012年12月31日から1年間ぶんのデータをとってくる場合)
これを指定した日付から1年間、2年間、3年間…
そして1か月間、2か月間…
2日間、3日間、4日間…と
したいのですがどのようにすればいいのかわかりません
SQL上でうまくできないのでしょうか

それともSQL上ではできないのでC#でshiteiに新しくここまで、という期間の入った日付を入れる変数を新しく作成しないといけないのでしょうか

アドバイスお願いいたします。

追記
回答ありがとうございました
どれも役立ちました!
シンプルでわかりやすいものをBAにさせていただきました
皆様ありがとうございました

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

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

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

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

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

guest

回答3

0

ベストアンサー

やりたいことはこういうことでしょうか

sql

1WHERE create_datetime >= '2012-12-31' 2 AND create_datetime < '2012-12-31' + interval '1 day' 3 4WHERE create_datetime >= '2012-12-31' 5 AND create_datetime < '2012-12-31' + interval '2 month' 6 7WHERE create_datetime >= '2012-12-31' 8 AND create_datetime < '2012-12-31' + interval '3 year'

8.5. 日付/時刻データ型
9.9. 日付/時刻関数と演算子

投稿2017/04/21 07:47

編集2017/04/25 02:23
SVC34

総合スコア1149

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

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

pro-poke5

2017/04/25 01:38

1年後の日付を指定する変数は持っていないのですが、新しく作る必要があるということでしょうか? (この場合'2013-12-31')
SVC34

2017/04/25 02:24

不要です(訂正しました)
guest

0

interval とbetween を使って作成しました。

sql

1--1年間 2select count(*) FROM tm_user_e 3WHERE create_datetime::date between '2012-12-31' AND date '2012-12-31' +interval '1 year -1 day'; 4--2年間 5select count(*) FROM tm_user_e 6WHERE create_datetime::date between '2012-12-31' AND date '2012-12-31' +interval '2 year -1 day'; 7 8--1か月間 9select count(*) FROM tm_user_e 10WHERE create_datetime::date between '2012-12-31' AND date '2012-12-31' +interval '1 month -1 day'; 11--2か月 12select count(*) FROM tm_user_e 13WHERE create_datetime::date between '2012-12-31' AND date '2012-12-31' +interval '2 month -1 day'; 14 15--2日間 16select count(*) FROM tm_user_e 17WHERE create_datetime::date between '2012-12-31' AND date '2012-12-31' +interval '2 day -1 day'; 18select count(*) FROM tm_user_e 19WHERE create_datetime::date between '2012-12-31' AND date '2012-12-31' +interval '1 day'; 20 21--3日間 22select count(*) FROM tm_user_e 23WHERE create_datetime::date between '2012-12-31' AND date '2012-12-31' +interval '3 day -1 day'; 24 25--1年9か月間 26select count(*) FROM tm_user_e 27WHERE create_datetime::date between '2012-12-31' AND date '2012-12-31' +interval '1 year 9 month -1 day';

投稿2017/04/21 10:22

編集2017/04/21 10:45
A.Ichi

総合スコア4070

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

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

0

postgreの仕様がよくわからないですがYEAR関数的なものはないのでしょうか?

create table tbl(id int,create_datetime datetime); insert into tbl values (1,'2016-01-01 00:00:00'), (2,'2016-12-01 00:00:00'), (3,'2016-12-31 23:59:59'), (4,'2017-01-01 00:00:00');

バルク処理ができない場合は、適当にデータ投入してください。

ここでyear関数が使えるなら

select year(create_datetime) as y,count(*) as c from tbl group by y;

さらに2016年だけ抜き出すなら

select year(create_datetime) as y,count(*) as c from tbl where year(create_datetime)='2016' group by y; /*もしくは*/ select year(create_datetime) as y,count(*) as c from tbl group by y having y='2016';

たとえば2016年の上半期だけぬきたいなら

select year(create_datetime) as y,count(*) as c from tbl where create_datetime between '2016-01-01 00:00:00' and '2016-09-31 23:59:59' group by y;

投稿2017/04/21 07:44

yambejp

総合スコア114839

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問