我有一张包含以下数据的表
tab1
POS NAME DATE
1 abc 08-08-2014
2 def 08-08-2014
1 xyz 14-08-2014
2 mno 14-08-2014
3 pqr 08-08-2014
10 tuv 08-08-2014
现在我想要的结果如下:
POS NAME DATE
1 xyz 14-08-2014
2 mno 14-08-2014
1 abc 08-08-2014
2 def 08-08-2014
3 pqr 08-08-2014
10 tuv 08-08-2014
2 rns 08-08-2014
我的逻辑是显示所有记录ORDER按日期IN DESC顺序和POS按ASC顺序
但是,如果我使用SELECT DISTINCT * FROM tab1 ORDER BY DATE
DESC运行查询,POS
ASC
然后显示以下结果集:
POS NAME DATE
1 xyz 14-08-2014
2 mno 14-08-2014
1 abc 08-08-2014
10 tuv 08-08-2014
2 def 08-08-2014
2 rns 08-08-2014
3 pqr 08-08-2014
答案 0 :(得分:3)
通常
SELECT * FROM tab1 ORDER BY `DATE` DESC, `POS` ASC
做你想做的事。
但是,由于您的POS列是字符串(char或varchar),您必须将其强制转换为数字:
SELECT * FROM tab1 ORDER BY `DATE` DESC, (`POS`+0) ASC
SELECT * FROM tab1 ORDER BY `DATE` DESC, CAST(`POS` AS INT) ASC
这将导致列转换为所有行中的数字,从而导致更糟糕的"性能。您应该考虑将POS存储为数字(整数)。
答案 1 :(得分:1)
试试这个:
Select
*
from
myTable
order by `date` desc, CAST(POS AS INT)
由于ASC是默认的,所以在我的回答中没有提及