電子書籍の厳選無料作品が豊富!

Mysqlの件で教えてください。
Mysqlのバージョンは5.6.14です。

+---------------------------------------------------+
|  juchuu  |  keishiki  |   starttime   |  koutei   |
+----------+-----------+---------------+------------+
| 8830 | 7745 | 2013-12-1 14:24 | 1010 |

|  8830 | 7745 | 2013-12-2 8:30 |   1020  |

|  8835 |   7720  | 2013-12-3 15:20 |   1010 |

| 8840 |   7745   | 2014-01-01 8:30 |   1010  |

|  8840 |  7745 | 2014-01-01 13:30 |  1020 |


上記のテーブルで、
・keishiki=7745 のデータ
・直近のjuchuuのグループのリスト(4行目と5行目のリスト)
を取得する構文を教えてください。
juchuuグループは2行とは限りません。

よろしくお願いします。

A 回答 (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があるとは想定していません
同じものがある場合はさらに順位をつけるロジックが必要になるので
    • good
    • 0
この回答へのお礼

ありがとうございます。できました。
お返事遅くなり申し訳ありませんでした。

お礼日時:2014/03/14 21:02

なるほど、そうなるとこんな感じ?



//元データ
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番目に大きいものを含むリストを抽出だとどうなりますでしょうか。

補足日時:2014/03/07 21:32
    • good
    • 0

>直近のjuchuuのグループのリスト



「直近」の定義があいまいです
juchuuが最大のものを意味するなら#1さんの通りですが
starttimeが最大のものを含むjuchuu全てとなると話は別です。
またstarttimeが同じものが出たときに複数のjuchuuを抜き出すのかどうかも
決めておく必要があります

なお最後に投入したデータという意味でしたら
投入日やauto_incrementを設定したカラムが必要です
見た目上selectで表示される最終行は「必ずしも」直近のデータだとは限りません

この回答への補足

ご回答ありがとうございます。
書き方も悪かったので、補足で説明させていただきます。
第一希望としては、keishikiが7745、かつ、starttimeが最大(直近)のものを含むリストを抽出したいと考えています。
第二希望として、keishikiが7745、かつ、juchuuが最大値のリストの抽出です。
度々申し訳ありませんが、よろしくお願いいたします。

補足日時:2014/03/06 21:55
    • good
    • 0

・keishiki=7745 のデータ


Select * from table where keishiki=7745;


・直近のjuchuuのグループのリスト(4行目と5行目のリスト)
select * from table where juchuu =
(select max(juchuu) from table)
;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す