アウトドア好きエンジニアのつぶやき
培った知識を世の中のために
2018年7月30日月曜日
PostgreSQLで先週の日曜日から土曜日までの日付でデータ取得したい
PostgreSQLで、先週分のデータを取得したい場合ありますよね?
例えば、単純に7日前〜昨日までとかでデータを取得すると、SQLを実行する日付によって変わってきてしまいます。
なので先週の日曜日から土曜日までを固定でデータを取りたいという場合の対応。
SELECT (now() + CAST('-' || (extract(dow from now()) + 7) || ' day' AS INTERVAL))::DATE;
まず上記で、今日の日付から、先週の日曜日のデータが取得できます。
※extractを使うと日曜日=0,月曜日=1というデータが取得でき、そこに7日を足した分を、頭の’-‘でマイナスを付けて引いています。
同様に、先週の土曜日のデータを取得する方法は以下になります
SELECT (now() + CAST('-' || (extract(dow from now()) + 1) || ' day' AS INTERVAL))::DATE;
単純に+7だったのを、+1に変えてあげればいいですね。
上記データを元に、実際の先週分を取得するSQLサンプルはこちら
SELECT 列名
FROM テーブル名
WHERE
created >= (SELECT (now() + CAST('-' || (extract(dow from now()) + 7) || ' day' AS INTERVAL))::DATE)
AND created < (SELECT (now() + CAST('-' || (extract(dow from now())) || ' day' AS INTERVAL))::DATE)
先週の土曜日までを取得したいのに、+1がなくなっているのは、「今週の日曜より小さいデータ」を取得して「先週分」とするためです。
以上です。自分もたまにしか使わず忘れてしまうので、誰かのご参考になれば!
例えば、単純に7日前〜昨日までとかでデータを取得すると、SQLを実行する日付によって変わってきてしまいます。
なので先週の日曜日から土曜日までを固定でデータを取りたいという場合の対応。
SELECT (now() + CAST('-' || (extract(dow from now()) + 7) || ' day' AS INTERVAL))::DATE;
まず上記で、今日の日付から、先週の日曜日のデータが取得できます。
※extractを使うと日曜日=0,月曜日=1というデータが取得でき、そこに7日を足した分を、頭の’-‘でマイナスを付けて引いています。
同様に、先週の土曜日のデータを取得する方法は以下になります
SELECT (now() + CAST('-' || (extract(dow from now()) + 1) || ' day' AS INTERVAL))::DATE;
単純に+7だったのを、+1に変えてあげればいいですね。
上記データを元に、実際の先週分を取得するSQLサンプルはこちら
SELECT 列名
FROM テーブル名
WHERE
created >= (SELECT (now() + CAST('-' || (extract(dow from now()) + 7) || ' day' AS INTERVAL))::DATE)
AND created < (SELECT (now() + CAST('-' || (extract(dow from now())) || ' day' AS INTERVAL))::DATE)
先週の土曜日までを取得したいのに、+1がなくなっているのは、「今週の日曜より小さいデータ」を取得して「先週分」とするためです。
以上です。自分もたまにしか使わず忘れてしまうので、誰かのご参考になれば!
2018年6月17日日曜日
PostGisを1.5.3から2.0にアップデートしたときに発生したSQLエラー対応
PostGisを1.5.3から2.0にアップデートしたときに、既存のpostgisからデータを取得するSQLで下記のようなエラーが発生。
1. GeometryFromText 指定名称、指定引数型に合う関数がありません。明示的な型キャストが必要かもしれません
2. 関数geometryfromtext(unknown, integer)は存在しません
3. 関数expand_sphere_pseudo(geometry, integer)は存在しません
4. リレーション spatial_ref_sys への権限がありません
もともとPostgis1.5.3で実際に流していたSQLは以下のようなもの
SELECT上記で、半径1000m以内のデータを取得していた。DISTANCEには、現在地からの距離。
/*省略*/
trunc(distance_sphere(A.geo, GeometryFromText('POINT(139.000 35.000)', 4326))) as DISTANCE
FROM
/*省略*/
WHERE
expand_sphere_pseudo(GeomFromText('POINT(139.000 35.000)', 4326), 1000) && A.geo
AND distance_sphere(A.geo, GeometryFromText('POINT(139.000 35.000)', 4326)) < 1000
1については、そもそもGeometryFromTextという関数がなくなっていた。
Postgis2.0では、ST_GeomFromTextを代わりに利用する模様。
2,3の関数geometryfromtextとdistance_sphereを使って、半径1000m以内のデータを取得しようとしていた処理では
ST_DWithinという関数を使って実現する。
最終的なPostgis2.0に対応したSQLは以下で結果が正常に返ってきた
SELECT
/*省略*/
trunc(ST_Distance(A.geo, ST_GeomFromText('POINT(139.000 35.000)', 4326))) as DISTANCE
FROM
/*省略*/
WHERE
ST_DWithin(A.geo, ST_GeomFromText('POINT(139.000 35.000)', 4326), 1000,true)
リレーション spatial_ref_sys への権限がありません
というエラーについては
/usr/share/pgsql/contrib/postgis-2.0/spatial_ref_sys.sql
上記のSQLを流すことで解決
psql -U postgres db名 -f /usr/share/pgsql/contrib/postgis-2.0/spatial_ref_sys.sql
2017年7月5日水曜日
ウェザーマスター スクエアタープ L (2016年モデル)使用感レビュー
先日のキャンプで、買ったばかりのウェザーマスターシリーズの最新のスクエアタープを利用してきました。
コールマンのサイトよりタープの情報
と言った形で、とにかくでかい。びっちり詰めれば16人座れるそうだ。
タープは始めて組み立ててみたが、迷うこと無く10分ほどで張ることができた。
使用感もとにかく広々していて最高。大人6人子供4人で利用したがまだ余裕があると感じた。
ヘキサタープとかなり迷ったが、スクエアタープにしてよかった。とにかく広い!
実際に張った状態はこんな形。
ネットではなぜかほとんど情報が見つからなかったので、少しでも情報になればと。
コールマンのサイトよりタープの情報
[NEW]2016年秋冬発売アイテム
抜群の開放感で広々空間を演出 グループでのキャンプにも大活躍の
横幅550cmワイドスクエアタープ
■キャンプを快適にする充実の装備
■550cmの大型サイズで広々空間を演出
■2家族が一緒のリビングで過ごせるラージサイズ
■大きく使う事もでき、サイドのポールの位置を変えれば日陰や目線隠しの暖簾としても使用可能に
●使用時サイズ:約550×450×280(h)cm
●収納時サイズ:約φ20×76cm
●重量:約10.5kg
と言った形で、とにかくでかい。びっちり詰めれば16人座れるそうだ。
タープは始めて組み立ててみたが、迷うこと無く10分ほどで張ることができた。
使用感もとにかく広々していて最高。大人6人子供4人で利用したがまだ余裕があると感じた。
ヘキサタープとかなり迷ったが、スクエアタープにしてよかった。とにかく広い!
実際に張った状態はこんな形。
ネットではなぜかほとんど情報が見つからなかったので、少しでも情報になればと。
2017年6月13日火曜日
Android Studio で Firebaseと接続してsyncしたら「No clients were able to be added to your Firebase project for the following reasons」エラー
Android Studioの2.2以降で、Firebaseと接続出来る機能があるが、それがエラーとなり接続できなかった。
一つ目にハマったのが、Android Studioのウィンドウの一番右上の虫眼鏡の右側には実はログインする機能があり、そのログインしているアカウントと、Firebaseに登録しているGoogleのアカウントが異なったため。
もう一つは、以下のエラー
google-services.jsonをFirebaseのサイトから最新版をダウンロードし、配置したらエラーが出なくなった。
どうやらローカルのgoogle-services.jsonが古いと上記エラーが発生することもあるようだ
一つ目にハマったのが、Android Studioのウィンドウの一番右上の虫眼鏡の右側には実はログインする機能があり、そのログインしているアカウントと、Firebaseに登録しているGoogleのアカウントが異なったため。
もう一つは、以下のエラー
No clients were able to be added to your Firebase project for the following reasons:
An app with this package name and SHA1 is already connected to a Google project. If you have used a Google API previously, please select that project in the Connect to an existing project list.
google-services.jsonをFirebaseのサイトから最新版をダウンロードし、配置したらエラーが出なくなった。
どうやらローカルのgoogle-services.jsonが古いと上記エラーが発生することもあるようだ
2017年5月26日金曜日
Android Google+のログインで Status{statusCode=DEVELOPER_ERROR, resolution=null}が発生
久しぶりにAndroid の Google+でログイン機能をテストしていたら、エラーも出ずにログインできない状態に。
調査をしたところ
private void handleSignInResult(GoogleSignInResult result) {
}
の関数内でresult.isSuccess()がfalseを返している。
以下の形でログを吐いてみたところ
Logging.e(result.getStatus().toString());
というエラーが発生していた。
調べていたら、Androidをdebugモードでビルドしていたのが原因だった。忘れてた。。releaseモードで動かさないとまともにGoogle+でのログインは動かないのだった。。。
早速マーケットに上げるときと同じ手順でapkファイルを作成し、Androidの実機でインストールで動くようになった!
調査をしたところ
private void handleSignInResult(GoogleSignInResult result) {
}
の関数内でresult.isSuccess()がfalseを返している。
以下の形でログを吐いてみたところ
Logging.e(result.getStatus().toString());
Status{statusCode=DEVELOPER_ERROR, resolution=null}
というエラーが発生していた。
調べていたら、Androidをdebugモードでビルドしていたのが原因だった。忘れてた。。releaseモードで動かさないとまともにGoogle+でのログインは動かないのだった。。。
早速マーケットに上げるときと同じ手順でapkファイルを作成し、Androidの実機でインストールで動くようになった!
2015年2月5日木曜日
AWSの固定IPアドレスのリミットを解除する方法
個人のサーバーをAWSで利用しているのだが、デフォルトの状態だと固定IPアドレスは5つまでしか取得できず以下のエラーが発生する。
An error occurred while attempting to allocate the IP address
The maximum number of addresses has been reached.
そんな時はAmazonに追加申請をすれば良いのだが、勝手にハードルが高いと思っていたのだが、ものの数十分でIPが追加される。
手順は以下
Amazon固定IP追加申請画面
AWSマネージメントコンソールにログインした状態で上記URLを開く
各項目に以下を設定 (以下が英語で表示されている方は、画面上に言語変更のプルダウンがあるのでそこから日本語を選択)
------------------------------------
CC : メールアドレス
内容: サービス制限の増加
制限タイプ : Elastic IPs -EC2 Classic
リクエスト1 リージョン : 固定IP追加したいリージョンを選択
制限 : EC2-Classic Elastic IP アドレス上限
新しい制限値: 変更したい上限値。(現在5だったので10と入力しました)
リクエスト2
→特に設定なし
申請理由の説明 : 追加理由を記入。
わたしの場合は「弊社の新サービスを構築するためにIPアドレスが必要です。」としておきました
連絡方法 : WEB
------------------------------------
上記で、送信!
平日の14時くらいに申請したところ、20分ほどで
というメールがきて完了!
以外に楽でびっくり
An error occurred while attempting to allocate the IP address
The maximum number of addresses has been reached.
そんな時はAmazonに追加申請をすれば良いのだが、勝手にハードルが高いと思っていたのだが、ものの数十分でIPが追加される。
手順は以下
Amazon固定IP追加申請画面
AWSマネージメントコンソールにログインした状態で上記URLを開く
各項目に以下を設定 (以下が英語で表示されている方は、画面上に言語変更のプルダウンがあるのでそこから日本語を選択)
------------------------------------
CC : メールアドレス
内容: サービス制限の増加
制限タイプ : Elastic IPs -EC2 Classic
リクエスト1 リージョン : 固定IP追加したいリージョンを選択
制限 : EC2-Classic Elastic IP アドレス上限
新しい制限値: 変更したい上限値。(現在5だったので10と入力しました)
リクエスト2
→特に設定なし
申請理由の説明 : 追加理由を記入。
わたしの場合は「弊社の新サービスを構築するためにIPアドレスが必要です。」としておきました
連絡方法 : WEB
------------------------------------
上記で、送信!
平日の14時くらいに申請したところ、20分ほどで
さきほどVPC EIPの上限を緩和させていただきました。
現在の上限は10でございます。
※ご利用いただけるまでに10分ほどお時間がかかる可能性がございます。
というメールがきて完了!
以外に楽でびっくり
登録:
投稿 (Atom)