Labs

<< 最初 < 前ページ 次ページ > 最後 >>
PostgreSQL のトピック一覧 条件クリア
icon 2018/07/19 各時間毎の累積データ
SQLで累積を計算する場合、OVER句を利用すると便利

1ヶ月の降水量を各時間ごとに累積


データ


1時間毎の雨量を INSERT
datetime, precipitation
2018-06-01 00:00, 0.0
2018-06-01 01:00, 0.1
2018-06-01 02:00, 0.3
.......
2018-06-30 22:00 1.2
2018-06-30 23:00 1.3

SQL


datetime を昇順でソートし、降水量累計
SELECT datetime, precipitation,
              SUM(precipitation) OVER(ORDER BY datetime ASC) AS sum_precipitation
FROM rainfalls
WHERE  datetime >= '2018-06-01 00:00' AND datetime < '2018-07-01 00:00'
ORDER BY datetime

計算後


datetime, precipitation, sum_precipitation
2018-06-01 00:00, 0.0, 0.0
2018-06-01 01:00, 0.1, 0.1
2018-06-01 02:00, 0.3, 0.4
.......
2018-06-30 22:00 1.2, 11.1
2018-06-30 23:00 1.3, 12.4
icon 2018/07/02 INSERT成功時にカラムデータを取得
SQL INSERT した後にプライマリIDを取得したい場合、 RETURNING を利用すると便利
INSERT INTO update_schedules (name, age) VALUES ('Yoo', '26') RETURNING id;
RETURNING の後は「*」なども指定できる。

icon 2017/08/30 pg_constraint で外部キー情報取得
pg_constraint の内部キー、外部キーは、pg_class、pg_attribute にアクセスしないと取得できない。

・contype = 'f'
・conrelid(内部テーブル):smallint
・confrelid(外部テーブル):smallint
・conkey(内部キー): smallint[]
・confkey(外部キー): smallint[]

まず、内部キーテーブルを作成して、副問い合わせで外部キーも連結させる。
内部キー、内部キーは数値配列なので抽出に「ANY」を利用する。

SELECT 
origin.*,
pg_class.oid as foreign_class_id,
pg_class.relname as foreign_relname,
pg_attribute.attnum as foreign_attnum,
pg_attribute.attname as foreign_attname
FROM 
(
SELECT 
pg_constraint.conrelid
, pg_class.oid as pg_class_id
, pg_class.relname
, pg_attribute.attnum
, pg_attribute.attname
, pg_constraint.confrelid
, pg_constraint.confkey
, pg_constraint.contype
FROM  pg_constraint
            LEFT JOIN pg_attribute ON pg_constraint.conrelid = pg_attribute.attrelid AND pg_attribute.attnum = ANY(pg_constraint.conkey)
            LEFT JOIN pg_class ON pg_constraint.conrelid = pg_class.oid
WHERE pg_constraint.contype = 'f' AND pg_constraint.conrelid = 'pg_classのID'
) AS origin
  LEFT JOIN pg_attribute ON origin.confrelid = pg_attribute.attrelid AND pg_attribute.attnum = ANY(origin.confkey)
  LEFT JOIN pg_class ON origin.confrelid = pg_class.oid
;
<< 最初 < 前ページ 次ページ > 最後 >>

このサイトについて

HTML5 & CSS3化しつつあるので、現在IEには対応してません。
できれば、Google Chromeやら Apple SafariのWebKit系をお勧めします。

DBからプログラムまで一応全て自作なので、バグってたらすいません。
実験でFlash版(Flex版)を先に作りましたが、ちょっと停止してます。

プロフィール

新宿近辺でSE & プログラマーしてます。
Webアプリの開発・設計とか、最近はiPhoneとか奮闘してます。
デザインはさっぱりです。

音楽は、昔からCubase打ち込み人間で、そっちの方が経歴は長いですが、最近はやる暇がないです。。。

今は、Gon's Privates ってバンドのキーボードやってます。
単発的に、なんちゃってジャズ系のライブもやってます。

名古屋生まれなのでドラゴンズ好きです。

Info && SNS

Gmail

 yohei.yoshikawa@gmail.com

Twitter

 http://twitter.com/yoo_yoo_yoo

あんまつぶやきませんが、一応技術系メインで使ってます。情報交換はこちらへ

FaceBook

 http://www.facebook.com/#!/profile.php?id=1439130626

海外の知り合いがいないので閑散としてます。

mixi

 http://mixi.jp/show_profile.pl?id=230072

音楽仲間とかはこっちメインでやってます。興味があればこちらへ