MySQL ORDER BY两个DESC在一列中

时间:2013-09-11 16:08:24

标签: mysql sql sql-order-by

我有2个MYSQL表, firma rach

  • firma table:
id_fir  | nazwa | opis  | nr_konta  | logo
-------------------------------------------------
0   | abc   | abc   | 123       | img/abc.png
1   | qwerty| qwert | 123       | img/qwerty.png
  • rach table:
id_rach | id_fir    | data_termin   | data_platnosc | kwota
----------------------------------------------------------------
0   | 1     | 2013-09-30    | null      | 123
1   | 0     | 2013-09-30    | 2013-09-17    | 123
2   | 0     | 2013-09-26    | 2013-09-21    | 321
3   | 1     | 2013-09-27    | null      | 333

我的SQL查询:

SELECT r.`id_rach` , f.`nazwa` , f.`opis` , r.`kwota` , r.`data_termin` , r.`data_platnosc`
FROM rach r
INNER JOIN firma f
USING ( id_fir )
ORDER BY `data_platnosc` IS NULL asc, `data_termin` desc

我到目前为止:

id_rach | nazwa | opis  | kwota | data_termin   | data_platnosc
-----------------------------------------------------------------
1   | abc   | abc   | 123   | 2013-09-30    | 2013-09-17
2   | abc   | abc   | 321   | 2013-09-26    | 2013-09-21
0   | qwerty| qwerty| 123   | 2013-09-30    | null  
3   | qwerty| qwerty| 333   | 2013-09-27    | null  

我想得到结果:

首先data_platnosc为null,data_termin命令为desc

然后是其他data_termin命令desc

id_rach | nazwa | opis  | kwota | data_termin   | data_platnosc
-----------------------------------------------------------------
0   | qwerty| qwerty| 123   | 2013-09-30    | null  
3   | qwerty| qwerty| 333   | 2013-09-27    | null  
1   | abc   | abc   | 123   | 2013-09-30    | 2013-09-17
2   | abc   | abc   | 321   | 2013-09-26    | 2013-09-21

和这个解决方案?

我想得到结果:

首先data_platnosc为null,data_termin为asc

然后其他data_termin不是null order desc

id_rach | nazwa | opis  | kwota | data_termin   | data_platnosc
-----------------------------------------------------------------
3   | qwerty| qwerty| 333   | 2013-09-27    | null    
0   | qwerty| qwerty| 123   | 2013-09-30    | null  
1   | abc   | abc   | 123   | 2013-09-30    | 2013-09-17
2   | abc   | abc   | 321   | 2013-09-26    | 2013-09-21

1 个答案:

答案 0 :(得分:0)

您的order by几乎正确无误:

ORDER BY `data_platnosc` IS NULL desc, `data_termin` desc

如果您想首先使用NULL值,请使用desc作为order by的第一个元素。 <{1}}如果为真,则返回IS NULL,并且您首先想要它。

或者,您可以使用1

IS NOT NULL

为此:

  

首先data_platnosc为null,data_termin为asc。然后其他data_termin不是null order desc

使用ORDER BY `data_platnosc` IS NOT NULL asc, `data_termin` desc 声明:

case