0

This is mytable:

id | state   | orderid | name  | date
1  | Hold    | 121212  | Mike  | 2018-04-11
2  | Closed  | 121213  | Homer | 2018-04-12
3  | Open    | 121214  | Mike  | 2018-04-13
4  | Hold    | 121215  | Bart  | 2018-04-14
5  | Open    | 121216  | Lisa  | 2018-04-15
6  | Closed  | 121217  | Bart  | 2018-04-16
7  | Closed  | 121218  | Homer | 2018-04-17

I'm trying to order by state (open, hold, close), then date (ASC), if the state is "closed", then date (DESC). So a result like this.

id | state   | orderid | name  | date
3  | Open    | 121214  | Mike  | 2018-04-13
5  | Open    | 121216  | Lisa  | 2018-04-15
1  | Hold    | 121212  | Mike  | 2018-04-11
4  | Hold    | 121215  | Bart  | 2018-04-14
7  | Closed  | 121218  | Homer | 2018-04-17
6  | Closed  | 121217  | Bart  | 2018-04-16
2  | Closed  | 121213  | Homer | 2018-04-12

This is the query I have now:

SELECT * FROM mytable ORDER BY FIELD(state,'Open','Hold','Closed') ASC, o_date DESC

Have attempted to add the examples given here: Can you add an if statement in ORDER BY? but I'm not getting the results I want.

Any ideas?

ThisIsMe
  • 61
  • 8

1 Answers1

1

Try this..

SELECT * FROM mytable 
ORDER BY FIELD(state,'Open','Hold','Closed') ASC, 
CASE WHEN state = 'Closed' THEN date END DESC,
date ASC
bingi
  • 78
  • 7