Chrononglyph

#7059

複雑怪奇なクエリ

新ピクチャレ大会開発作業、今月末には基本機能の完成を目指しているのですが、
どうも暗礁に乗り上げてしまっています。
と言うのも、SQLが難しすぎる!!


いまやりたいのは、各ユーザーごとにそれぞれ同じユーザーIDとステージIDを持つ記録のうち、
最もスコアの大きい記録のみ抽出し、それをスコアの降順に並び替えるという処理。
共通した記録を1つに絞るのはGROUP BY句で実現できるのですが、
同じユーザーIDの記録をグループ化する際、基本的には最も古い記録が代表の記録になります。
しかし記録テーブルは当然新しいほどスコアが高いのでそれでは困る。
SELECT句にMAX関数を使うことで最大スコアを抽出することはできるのですが、
それに付随する情報を持ってくることはできない。
ORDER BY句で並び替えてからグループ化できればそれが一番早いのですが、
SQLの優先度の法則ではGROUP BYよりORDER BYを先に適用することはできない……。
サブクエリを作れば解決できそうな雰囲気はありますが、
最もスコアの高い記録だけを抽出したところで同値はたくさんあるので、
LEFT JOINで繋ぐなどといった処理は現実的ではありません。
かといってユニークIDはランダム値なので使えないし……。
散々ググっているのですが現状まだ解決できていない状況です。誰か教えてくれ。


なんというかSQLって論理思考力を高く求められる気がして、自分には向いていないかも。
そろそろwebデザインをやらせてくれと思いながら取り組んでいました。
とにかく何日も同じところで詰まっているとモチベに強い悪影響を及ぼすので、
このSQL問題はいったん支障の無い形で仮完成としておいて、
スキップして次のタスクに移ることにしました。
そうしないと今月完成も危うくなってしまいそうで……。


ゴールデンウィーク終了時に最低限リリースできることを目標とするならば、猶予は約半月。
今週過ごした感じだとそのうち作業に集中できるのは金・日・月曜日のみなので、
単純計算で作業できる日は11日ということになります。
途中ゴールデンウィークがあるけど、まあ結局確保できる時間は同じくらいでしょう。
1日3時間として33時間……基本機能作成はもう後半戦なので、
これくらいあればできるような気がしますが難解なバグが出てくるとわからないかも。
とにかく今月後半はこれを重点的に進めたいところです。



同じタグを含む記事(webサイト制作作業
#7727最先端に飛び付けない』(2025/02/11
webサイト制作作業今日の出来事
#7516半年ぶりの開発反省まとめ』(2024/07/15
webサイト制作作業今日の出来事
#7101レガシーからの脱却』(2023/05/27
webサイト制作作業web制作
#7091完成へ一直線』(2023/05/17
webサイト制作作業web制作
#7059複雑怪奇なクエリ』(2023/04/15
webサイト制作作業web制作
#6970最先端の迷走』(2023/01/16
webサイト制作作業今日の出来事
#6927ネットワークの信号』(2022/12/04
webサイト制作作業自分
前後の記事