質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1045閲覧

【MySQL】同テーブル内に2つの日付データが入ったカラムがあり、2つのうち新しい方を基準にして降順に並び替えたい

mttkd399

総合スコア13

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/04/02 08:47

編集2018/04/02 13:32

Purchase_statusテーブルの中身がこのようになっています。

idday_data1day_data2
12010-01-012010-02-10
22011-04-01null
32018-02-112018-02-21
4null2018-0901
.........

この時、2つの日付データから新しい方を基準にして降順に並び替えたいです。

ruby

1@purchase_statuses = current_user.purchase_statuses.order('day_data1, day_data2 DESC')

このようにしてみたのですが、先にday_data1が降順に並び替えられて、その後にday_data2が降順に並び替えられるという順序になってしまい、思った通りの挙動になりません。
例えば100件のデータがあった時に1〜60件はday_data1が降順に並べられ、61~100件はday_data2によって降順に並び替えられるという感じになってしまいます。

どのように記述すれば上記の目標が達成できるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2018/04/02 10:27

同じSQLでも方言が大きいですから、どのデータベースを使うのかをタグで明示した方が適切なコメントが付き易いです。 [SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう!](https://www.ashisuto.co.jp/corporate/column/technical-column/detail/1197236_2274.html) MySQLだと思っていて開発していざ納品になってOracleだということがわかって、エラーが多発したって笑えない経験をしないと身に付かない人もいます。
mttkd399

2018/04/02 13:31

ありがとうございます。修正しました。
guest

回答1

0

ベストアンサー

SQLの種類にもよりますが、MySQLだとgreatestとcoalesceですかね

SQL

1create table tbl(id int,day_data1 date, day_data2 date); 2insert into tbl values 3(1,'2010-01-01','2010-02-10'), 4(2,'2011-04-01',null), 5(3,'2018-02-11','2018-02-21'), 6(4,null,'2018-09-01');

ソート

SQL

1select * from tbl 2order by greatest(coalesce(day_data1,'0000-00-00'),coalesce(day_data2,'0000-00-00')) desc

投稿2018/04/02 09:43

yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mttkd399

2018/04/02 14:11

上記の命令で解決できました!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問