按日期排序时SQL如何重新排列查询结果,其中所有列具有相同的日期

时间:2016-04-08 11:00:39

标签: mysql date sql-order-by

在InSQL中,我有一个包含2行的表,其中我有一个日期列,一个整数列和一个varchar列。日期字段和整数字段对于两个行具有完全相同的值,只有varchar字段不同。数据如下所示

no   date     message
1   1/1/2000    a
1   1/1/2000    b

当我查询

从table_name开始按*搜索*, 查询结果与表中的结果相同

no   date     message
1   1/1/2000    a
1   1/1/2000    b

,即当我按整数值

排序时,我可以以相同的顺序恢复数据

但是当我尝试按日期字段排序时(完全相同) 然后我就这样了

no   date     message
1   1/1/2000    b
1   1/1/2000    a

重新排列行。为什么会发生这种情况

1 个答案:

答案 0 :(得分:0)

“稳定排序”是一种排序,它保留了当键具有相同值时要排序的数据中的行的原始顺序(Wikipedia有一个专门用于这些算法的页面)。因此,您询问SQL中的排序是否稳定(或者为什么不是这样)。

答案很明显:SQL中的排序不稳定。为什么这很明显? SQL表表示无序集。因此,表中没有用于保留的顺序。

如果要保留“原始排序”,则需要包含一个指定原始排序的附加唯一键。如果您有自动递增的主键,那么这将是添加到order by order by date, no的自然键。