やりたいこと
同じテーブルで、異なるソート(order by)を2つ作成して、その2つの条件を連結させたいです。
具体的には以下の通りです。
テーブル(table_1)
id | num | created |
---|---|---|
1 | 3 | 2017-08-10 |
2 | 4 | 2017-08-13 |
3 | 1 | 2017-08-15 |
4 | 5 | 2017-08-18 |
5 | 2 | 2017-08-20 |
##### 条件 |
- 現在(2017-08-23)から1週間以内のデータをcreated順に取得
-
- の後にnum順に取得
結果
id | num | created |
---|---|---|
5 | 2 | 2017-08-20 |
4 | 5 | 2017-08-18 |
3 | 1 | 2017-08-15 |
1 | 3 | 2017-08-10 |
2 | 4 | 2017-08-13 |
- idが5と4が条件1によるソート
- idが1と2と3が条件2によるソート
現状
SQL文
select * from (select * from table_1 where created > "2017-08-16" ORDER BY created desc limit 5) UNION select id from (select * from table_1 order by num limit 5);
問題点
- 2つのselect文の中でorder by を利用しようとするとlimitを利用しないといけない -> limitを数値が必要
聞きたいこと
このような実装以外に要件を満たせるような書き方はありますでしょうか。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー