最新の継続日数を取得するSQLを作ろうとした

このブログは技術記事メインで運用しようとして始めましたが、気付いたら本のアウトプットメインになってました。笑 たまには技術記事を書こうということで今週取り組んでて苦しんだPostgreSQLを使った最新の継続日数取得について書きます。 経緯 今コツコツと取り組んでいる個人開発でGitHubとかで見る最新の継続日数の取得をしたいと考えたところから始まりました。 ちなみにこんな感じのやつです。 Current StreakをSQLで実現しようとしました。 実装 ネットで最新の継続日数を取得するSQLの情報が全然なくどうしようかなと迷っていたら、Latest Number of Consecutive Days(Current Streak)を見つけました。 この記事を見ていると何やらSQL Serverで実現したいことを実装しているっぽい!ということでこれをPostgreSQLに書き換えてみようと試みました。 上記記事で最終的にできてたSQLはこんな感じでした。これをPostgreSQLに変えていきます。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 DECLARE @habits TABLE (ID INT IDENTITY, [Target] INT) INSERT INTO @habits ([Target]) VALUES (1) DECLARE @entries TABLE (ID INT IDENTITY, HabitID INT, EntryDate datetime) INSERT INTO @entries (HabitID, EntryDate) VALUES (1, '20150221'),(1, '20150222'),(1,'20150223') ;WITH distinct_dates AS ( SELECT DISTINCT HabitID, convert(date, dateadd(HOUR, -3, EntryDate)) AS Day FROM @entries ), numbering AS ( SELECT distinct_dates....

January 31, 2021 · 2 min · 336 words · Yu

TablePlusで追加したデータが取得できない

PostgreSQLにTablePlusからデータを作成したはいいもののGolangから作成したデータが取得できない。。 ということが発生していました。解決策はとても単純でしたが、少しハマったので記事にしました。 解決策 TablePlusの画面でデータを作成した後にコミットができていなかったです。 上記画像の状態だとコミットができていません。⌘Sなどでコミットしてあげましょう。 しっかりと公式ドキュメントを読まなあかんですね。

December 7, 2020 · 1 min · 6 words · Yu

MongoDB 入門

最近、MongoDBを使うことがあり、NoSQLをはじめて使いました。MongoDBを触ったことがない人のために書きます。 MongoDBインストール&起動 今回はDockerHubからMongoDBのコンテナイメージをインストールします。 $ docker pull mongo インストールができたら、以下コマンドでコンテナを起動します。 $ docker run --name mongo-sample -d mongo -dはバックグランドで起動することを意味してます。 起動したコンテナ内に以下コマンドで入ります。 $ docker exec -it mongo-sample bash MongoDBのシェル起動 MongoDBのコンテナ内で以下コマンドを実行します。 $ mongo シェルを起動したら、環境準備は完了です。 基礎的な用語解説 MongoDBをさわっていく上で、イメージしやすくするために、Oracleの用語と比較します。 MongoDB Oracle データベース データベース コレクション テーブル ドキュメント 行(レコード) フィールド 列(カラム) テストデータ作成 以下コマンドをシェルで入力して、テストデータを作成します。 > db.foods.insert({name:'apple', price:50, producer:['sato']}); > db.foods.insert({name:'meat', price:100, producer:['suzuki']}); > db.foods.insert({name:'fish', price:120, producer:['kaneko', 'kitamura']}); 以下コマンドでDBの情報をみることができます。 > db.stats() { "db" : "test", "collections" : 1, "views" : 0, "objects" : 3, "avgObjSize" : 86, "dataSize" : 258, "storageSize" : 20480, "numExtents" : 0, "indexes" : 1, "indexSize" : 20480, "scaleFactor" : 1, "fsUsedSize" : 28014751744, "fsTotalSize" : 62725623808, "ok" : 1 } testデータベースに"collections" : 1となっていて、foodsコレクションが作成されて、"objects" : 3からドキュメントが3つ作成されていることが分かります。...

April 30, 2020 · 3 min · 443 words · Yu