- ベストアンサー
直近のデータのリストを取得する方法
- Mysqlのバージョン5.6.14の環境で、指定条件に基づいてデータのリストを取得する方法について教えてください。
- 特定の条件に一致するデータを抽出し、直近のjuchuuのグループのリストを取得する方法について、Mysqlのバージョン5.6.14での実行手順を教えてください。
- Mysqlのバージョン5.6.14を使用して、指定条件に一致するデータを抽出し、直近のjuchuuのグループのリストを取得するための構文を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>starttimeが2番目に大きいもの ちょっと特殊になりますがこんな感じ select * from tbl where (juchuu,keisiki) in (select juchuu,t2.keisiki from tbl as t2 inner join (select starttime,keisiki from tbl where keisiki=7745 order by starttime desc limit 1,1) as t3 on t2.starttime=t3.starttime and t2.keisiki=t3.keisiki) ここでlimit 1,1の前の「1」が2番目に大きいという意味 つまりn番目に大きいものを含むはlimit n-1,1とする 1番大きいのはlimit 0,1でもいいが、maxを使った方がらく keisikiごとに同じstarttimeがあるとは想定していません 同じものがある場合はさらに順位をつけるロジックが必要になるので
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
なるほど、そうなるとこんな感じ? //元データ create table tbl(juchuu int,keisiki int, starttime datetime,koutei int); insert into tbl values(8830,7745,'2013-12-1 14:24',1010),(8830,7745,'2013-12-02 08:30',1020),(8835,7720,'2013-12-03 15:20',1010),(8840,7745,'2014-01-01 08:30',1010),(8840,7745,'2014-01-01 13:30',1020); //結果 select * from tbl where (juchuu,keisiki) in (select juchuu,keisiki from tbl where (starttime,keisiki) in (select max(starttime),keisiki from tbl where keisiki=7745));
補足
ありがとうございます!できました。 3たびで申し訳ないのですが、starttimeが2番目に大きいものを含むリストを抽出だとどうなりますでしょうか。
- yambejp
- ベストアンサー率51% (3827/7415)
>直近のjuchuuのグループのリスト 「直近」の定義があいまいです juchuuが最大のものを意味するなら#1さんの通りですが starttimeが最大のものを含むjuchuu全てとなると話は別です。 またstarttimeが同じものが出たときに複数のjuchuuを抜き出すのかどうかも 決めておく必要があります なお最後に投入したデータという意味でしたら 投入日やauto_incrementを設定したカラムが必要です 見た目上selectで表示される最終行は「必ずしも」直近のデータだとは限りません
補足
ご回答ありがとうございます。 書き方も悪かったので、補足で説明させていただきます。 第一希望としては、keishikiが7745、かつ、starttimeが最大(直近)のものを含むリストを抽出したいと考えています。 第二希望として、keishikiが7745、かつ、juchuuが最大値のリストの抽出です。 度々申し訳ありませんが、よろしくお願いいたします。
- bin-chan
- ベストアンサー率33% (1403/4213)
・keishiki=7745 のデータ Select * from table where keishiki=7745; ・直近のjuchuuのグループのリスト(4行目と5行目のリスト) select * from table where juchuu = (select max(juchuu) from table) ;
お礼
ありがとうございます。できました。 お返事遅くなり申し訳ありませんでした。