![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
MYSQL5.1を利用しております。
ソート条件で悪戦苦闘しておりまして、何を見てもわからなかったため質問させて頂きます。
=================================================
【hogehogeテーブル】
ID start_time end_time
1 2009-8-18 11:00:00 2009-8-18 16:00:00
2 2009-8-18 10:30:00 2009-8-18 14:00:00
3 2009-8-18 09:00:00 2009-8-18 18:00:00
4 2009-8-18 12:00:00 2009-8-18 20:00:00
5 2009-8-18 13:00:00 2009-8-18 20:00:00
=================================================
【SQL文】
SELECT
*
FROM hogehoge
( start_time <= NOW() AND end_time >= NOW() ) DESC,
( start_time > NOW() AND end_time >= NOW() ) DESC,
( start_time < NOW() AND end_time <= NOW() ) DESC;
=================================================
DESCの1回目は今の時間がstart_time と end_time の間に入っている場合、
DESCの2回目は今の時間がstart_time と end_time よりも大きい時間の場合、
DESCの3回目は今の時間がstart_time と end_time よりも小さい時間の場合です。
修正したい点は、
DESCの1回目をしたときに、その後すぐ、DESCをしたものに対してのみstart_timeの大きい順(降順)に並べ替えたいのです。
イメージとしては下記のようなものでしょうか・・
=================================================
SELECT
*
FROM hogehoge
( start_time <= NOW() AND end_time >= NOW() ) DESC,
(上でDESCしたものに対してstart_timeの降順に並び替え),
( start_time > NOW() AND end_time >= NOW() ) DESC,
( start_time < NOW() AND end_time <= NOW() ) DESC;
=================================================
色々試してはみたのですが、文法のエラーが出現し、検索してみても本を読んでみても参考に出来るもの見つからず困り果てております。
どうか皆様のお力添えを宜しくお願い致します!
No.3ベストアンサー
- 回答日時:
ちょっとわかりにくかったので一部修正します
ORDER BY X ASC,IF(X=2,start_time,0) ASC,start_time DESC
・・・完璧すぎです。
有難うございます!本当に勉強になりました。
正直、それぞれで分けてデータを取得して、その配列を結合するしかないなぁと今まで思っていました。
SQL文の工夫でここまで出来るものなのですね!(yambejp様にとっては簡単なのでしょうが・・)
まだ、このSQL文を他ですぐ使いまわせるほど理解できたわけではないので(汗)このサンプルをもとに色々やってみます!
本当に有難うございました!!!
No.2
- 回答日時:
たとえばこんな感じでどうでしょ?
SET @NOW:=NOW();
SELECT *
,IF(@NOW BETWEEN start_time AND end_time,1,0)
+IF(@NOW >end_time,2,0)
+IF(@NOW <start_time,3,0)
AS X
FROM hogehoge
ORDER BY X ASC,(X=2)*start_time ASC,start_time DESC
No.1
- 回答日時:
3回ソートするのではなく、まとめちゃえば?
SET @NOW:=NOW();
SELECT *
,IF(@NOW BETWEEN start_time AND end_time,1,0)
+IF(@NOW >end_time,2,0)
+IF(@NOW <start_time,3,0)
AS X
FROM hogehoge
ORDER BY X ASC,start_time DESC
※デバッグしやすくするために、NOW()を直接使わず
変数におとしてあります。
この回答への補足
>>yambejp様
すごいの一言です。。実現できてしまいました!
実際は、下記のように2回目のDESCに対してのみstart_timeの降順にしなければいけないのですが、yambejp様から頂いたサンプルを参考にしてやってみても、結局思うようにいかず・・・
お時間のあるときで構いませんので、あと一押し、この無知な私にお力をお願いできませんでしょうか?
=================================================
SELECT
*
FROM hogehoge
( start_time <= NOW() AND end_time >= NOW() ) DESC,
(すぐ上でDESCしたものに対してstart_timeの降順に並び替え),
( start_time > NOW() AND end_time >= NOW() ) DESC,
(すぐ上でDESCしたものに対してstart_timeの昇順に並び替え),
( start_time < NOW() AND end_time <= NOW() ) DESC,
(すぐ上でDESCしたものに対してstart_timeの降順に並び替え);
=================================================
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- Visual Basic(VBA) ワークシートチェンジで曜日を表示する方法 1 2023/03/04 21:51
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- 英語 この英文は平易な反面格調高いですか? 1 2023/01/15 12:04
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- Visual Basic(VBA) 標準モジュール Public mOnTime As Date Sub sample() '実行プロシ 1 2023/02/22 15:44
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1の行を固定した上でVBAを用い...
-
ファイルの漢数字の順番につい...
-
並べ替えについて
-
アクセスに関して。クエリの並...
-
ソート(PL/SQL)
-
Selectした時のレコードの取得順
-
月末日のみソートしたい
-
テーブルレーコードをソートし...
-
ORDER BY RAND() 後のソートの方法
-
エクセル、並び替え正しくソー...
-
エクセルの縦列のソートできま...
-
Windowsでファイル名でソートさ...
-
エクセルVBAでデータ並べ替え
-
文字型の順番がうまく並ばない。
-
MySQLで先頭にinsertしたい
-
WORDの「並べ替え」について
-
エクセルでダブルクリックして...
-
ソートした値をから別の条件で...
-
Excelで作成した円グラフのデー...
-
ハイフンの入ったデータの並べ替え
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字2桁、3桁交じりの文字列...
-
レコードの登録順がおかしい
-
ファイルの漢数字の順番につい...
-
並べ替えについて
-
1の行を固定した上でVBAを用い...
-
テーブルレーコードをソートし...
-
エクセル、並び替え正しくソー...
-
リストボックス内を昇順並べる方法
-
ハイフンの入ったデータの並べ替え
-
SQLで曜日のソートを月火水木金...
-
Selectした時のレコードの取得順
-
アクセスに関して。クエリの並...
-
ファイルメーカーでソート後の...
-
月末日のみソートしたい
-
accessでDISTINCT 句と矛盾
-
becky!での表示について質問
-
ソート(PL/SQL)
-
上から何番目か。
-
文字型の順番がうまく並ばない。
-
excel:一番上の行がソートでき...
おすすめ情報