Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。期間を結合する以下の問題を解きます。第2版』242ページより引用、簡潔に改変したものです。スケジュール表の中でOverLapした期間をまとめるSelect文を考えます。2019-03-15TimeSheetsテーブルの重複した期間をまとめて、期間の開始と終了を表示します。'2019-03-15');解として、以下の方法が考えられます。StartDateとし、EndDateは、max(EndDate)とします。期間の連結について、考察してみます。行Xの期間が他の行Yの期間と連結するのは、下記の2つの場合が考えられます。Y.EndDate場合1と場合2の数式で、行Aから見て他の行Bと連結しているなら、行Bから見ても行Aと連結していると分かります。以上により、StartDateの昇順に行を見ていって、StartDateが自分未満の行(下界の行)と連結してたら0、連結してなかったら1とする数の累計で、グループ化すればいいと分かります。SQLのイメージ(第1段階)は下記となります。StartDateで赤線を引いています。SQLのイメージ(第2段階)は下記となります。対応する黄緑線を引いています。SQLのイメージ(第3段階)は下記となります。対応する赤線を引いています。以下の問題を解きます。第2版』252、253ページより引用、簡潔に改変したものです。決まった列に値を配置してレポートのような形で表示するSelect文を考えます。テーブルデータNamesテーブルname-------AlBenCharlieDavidEdFrankGregHowardIdaJoeKenLarryMikeNealNamesテーブルのname列を、3行ごとに、1行で表示します(最終行の余った列は、nullとします)。出力順は、行も列も、Namesテーブルのname列の昇順とします。('Neal');解として、以下の方法が考えられます。0);0以上の整数を3で割った時の、商と余りは下記となります。以上により、商でグループ化しつつ、余りに対応したname列を、max関数とcase式を組み合わせて表示すればいいと分かります。SQLのイメージは下記となります。連続的なグルーピング以下の問題を解きます。第2版』261ページより引用、簡潔に改変したものです。指定列の値が連続した区間をまとめる、Select文を考えます。bbbb各data値がnumの何番から何番まで連続しているかを、その出現順でまとめます。(15,'bbbb');解として、以下の2つの方法が考えられます。GID;numの昇順で行を見ていって、Lag関数を使って、シーケンス開始なら1、シーケンス開始でなければ0とする数を求め、その累計でグループ化しています。SQLのイメージは下記となります。GID,dataに対応する赤線を引いています。min(num);中学受験の算数で有名な旅人算の感覚を使う方法もあります。旅人C)が、数直線の原点からプラス方向に同時にスタートしたとして、下記のように考えています。旅人Cのどれか)と、旅人Xとの距離でグループ化してます。SQLのイメージは下記となります。distanceに対応する赤線を引いてます。数独パズルニコリの数独の問題を解きます。第2版』270、271ページより引用、簡潔に改変したものです。数独を再帰With句で解いてみましょう。|+------+------+------+------+--------+-----------+数独を解くのに使う文字列関数の紹介です。解として、以下の方法が考えられます。|+-----------+再帰項で、1から9までの連番テーブルとの内部結合を繰り返しつつ、where句で、その連番でマスを埋めることが可能かをチェックしています。SQLのイメージ(探索木の深さは3まで)は下記となります。幅優先探索の探索木をイメージしています。未確定マスは、1から9までのノードが作成候補になりつつ、枝切りされていくイメージです。高さ1のノードが、問題の1番上の行の1番左のマスに対応し、高さ2のノードが、問題の1番上の行の左から2番目のマスに対応し、高さ3のノードが、問題の1番上の行の左から3番目のマスに対応します。8.0のSQLの新機能である、Window関数と再帰With句の解説を行いました。本連載は、今回で終了となります。ケンジ)趣味が競技プログラミングなWebエンジニアで、OracleSQLパズルの運営者。AtCoderの最高レーティングは1204(水色)。プラットフォームチームの意義と実践のポイント1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。プラットフォームチームの意義と実践のポイント1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。プラットフォームチームの意義と実践のポイント1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。