• ベストアンサー

複雑な並び替え処理

select * from data_table order by case status when 'status1' then 1 when 'status2' then 2 when 'status3' then 2 when 'status4' then 3 else 4 end , 登録日 DESC 上記は、status1>status2,status3>status4の優先順位で登録日順にSQLを取得しています。 このSQL文を改良し、status1の場合のみ登録日ではなく更新日順に並び替えた状態で 取得を行いたいです。良い方法はありませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ん~・・・こんな感じ? select * from data_table order by case status when 'status1' then 1 when 'status2' then 2 when 'status3' then 2 when 'status4' then 3 else 4 end ASC , if(status='status1',`更新日`,`登録日`) DESC

25taku
質問者

お礼

出来ました! シンプルでわかりやすいです。 ありがとうございます!

その他の回答 (1)

回答No.1

「登録日」を「case status when 'status1' then 更新日 else 登録日 end」とすれば出来ます。

25taku
質問者

お礼

ご回答ありがとうございます。 私がどこか見落としているのか、うまくいきませんでした。

関連するQ&A