Mysql使用两列进行排序

15 浏览
0 Comments

Mysql使用两列进行排序

我正在使用一个具有Createdon和Lastmodifiedon字段的表格,我需要根据createdon先显示新添加的记录,然后根据lastmodifiedon显示记录。我尝试在查询末尾添加"ORDER BY Createdon,Lastmodifiedon desc",但排序仅基于第一列进行。请帮忙解决这个问题。谢谢。

0
0 Comments

问题:使用两列进行Mysql排序的原因和解决方法

在这个问题中,数据表现出了异常的行为。例如,你可以提供一些数据表现异常的例子,以及你期望看到的结果和实际得到的结果吗?

你所使用的ORDER BY是通常使用的方式,基本上按照列表中第一个进行排序,如果遇到两个相同的值,则按照列表中的第二个进行排序。一个典型的例子是按照名字和姓氏排序。如果按照姓氏排序,你可能会得到两个"Smith",在这种情况下,你会按照名字进行排序,以使得Alex出现在Sheridan之前。

在你的例子中,你希望按照CreatedOn排序,然后按照ModifiedOn排序。它将按照创建日期进行排序,如果有两个数据在相同的日期时间(或者只是日期)创建,那么它将按照修改日期对它们进行排序。

解决方法是什么呢?如果你保持数据的良好状态,使得ModifiedOn为空,那么你可以翻转排序并执行类似于:ORDER BY ModifiedOn, CreatedOn的操作。然而,这样做会遇到一个问题:你的ModifiedOn日期将需要从最旧的日期开始,因为空日期被认为是旧日期(例如1/1/1970)。要正确地翻转这个日期,可能需要更复杂的排序操作。为了提出更好的答案,可能需要一些数据来确保查询是正确的 🙂

文章标题:Mysql使用两列进行排序的原因及解决方法

在数据库查询中,我们经常需要对结果按照特定的列进行排序。通常情况下,我们可以通过在ORDER BY语句中指定要排序的列来实现这一点。然而,在某些情况下,我们可能需要按照两个列进行排序。本文将探讨为什么会出现这种需求以及如何解决它。

在实际应用中,我们可能会遇到一些数据表现异常的情况。例如,假设我们有一个包含用户创建时间和修改时间的表。我们希望首先按照创建时间排序,然后按照修改时间排序。如果有两条数据具有相同的创建时间,我们希望按照修改时间对它们进行排序。

通常情况下,我们可以使用ORDER BY语句来实现这一点。例如,我们可以使用ORDER BY CreatedOn, ModifiedOn来按照创建时间和修改时间进行排序。在这种情况下,首先按照创建时间进行排序,如果有两条数据具有相同的创建时间,则按照修改时间进行排序。

然而,有时候我们可能会遇到一些问题。例如,如果ModifiedOn列中的某些数据为空,排序结果可能会出现异常。因为空日期被认为是旧日期,所以它们会被排在前面。为了解决这个问题,我们可以翻转排序顺序,使用ORDER BY ModifiedOn, CreatedOn来先按照修改时间排序,然后按照创建时间排序。

然而,这种方法也有一些局限性。为了正确地翻转日期排序,我们需要确保ModifiedOn列的日期从最旧的日期开始。否则,空日期将被认为是较旧的日期,导致排序结果不符合预期。

Mysql使用两列进行排序可能会出现数据表现异常的情况。为了解决这个问题,我们可以通过翻转排序顺序,并确保数据的正确性来得到正确的排序结果。

0
0 Comments

在MySQL中,我们可以使用ORDER BY子句对查询结果进行排序。通常情况下,我们可以使用单个列进行排序,但有时我们需要使用多个列进行排序。然而,有时候我们可能会遇到使用多个列进行排序时的问题。

问题出现的原因是在给定的示例中,排序是按照Createdon列进行升序排序的。这意味着较新的记录会出现在结果集的末尾。然而,我们可能希望较新的记录出现在结果集的开头。

解决这个问题的方法是使用两个ORDER BY子句。首先,我们可以按照Createdon列进行降序排序,这样较新的记录会出现在结果集的开头。然后,我们可以使用Lastmodifiedon列进行降序排序,以进一步对结果集进行排序。

以下是正确的解决方法:

ORDER BY Createdon DESC, Lastmodifiedon DESC

通过这个解决方法,我们可以确保结果集中的记录按照Createdon和Lastmodifiedon列进行降序排序,从而达到我们期望的排序效果。

总之,当我们需要使用多个列进行排序时,我们需要确保给出正确的排序顺序,以便得到我们期望的结果。在MySQL中,我们可以使用多个ORDER BY子句来实现这个目的。

0
0 Comments

Mysql使用两个列进行排序的问题出现的原因是,日期列通常包含精确到毫秒级的时间,导致后面的排序顺序被忽略。因为在大多数应用程序中,第一个日期相同的情况出现的概率太低,无法产生影响。

解决这个问题的方法是将初始日期截断到你满意的分辨率(例如1天),并按照这个截断后的日期进行排序,这样就可以得到排序中相同的项目,然后第二个排序条件就会起作用。

我不太熟悉MySQL的语法,但在SQL Server中,我知道最简单的方法是:

SELECT * FROM Table
ORDER BY FLOOR(CAST(CreatedOn AS Float)), LastModifiedOn DESC

这将给你一个1天的分辨率 - 原因是当将SQL Server的日期转换为浮点数时,会得到一个表示日期的整数部分。如果你想要不同的分辨率,可以在ORDER BY语句中使用DATEADD和DATEDIFF函数,或者将日期转换为ASCII可排序格式的字符串(例如YYYYMMDD hhmmss),并在适当的位置截断。

0