我正在运行只返回整个数据的一部分的SQL查询。换句话说,数据是“框架”。我有一个'ORDER(ORDER BY'部分,无论出于何种原因,那部分不是一直都在工作。有时候我会得到我期望的,有时我没有。
查询:
SELECT
*
FROM
(
SELECT
ROW_NUMBER() OVER(ORDER BY [datetime] DESC, timeMicroSec DESC) AS rowNum,
...
FROM
...
WHERE
...
) AS TempTbl
WHERE
rowNum BETWEEN @startRow AND @endRow;
整个数据查询在没有框架时工作,我在最后使用'ORDER BY'子句。在下图中,[datetime]列和[timeMicroSec]列以字符串连接方式连接。
正如你所看到的,排序都搞砸了。任何帮助将不胜感激。
答案 0 :(得分:4)
ORDER BY rowNum
作为查询的最后一部分将解决您的问题。
答案 1 :(得分:4)
将DateTime转换为Varchar时,它会更改SQL Server对列进行排序的方式。它将不再按时间顺序排序,而是仅仅是一个普通的旧字符串。
如果数据类型是DateTime,您将获得以下降序排序:
01/11/2011
02/22/2010
第一个日期后来按时间顺序排列......但如果数据类型是Varchar ...它将被排序为:
02/22/2010
01/11/2011
因为字符串“02”出现在“01”之后......实际日期值此时无关紧要。将日期与timeMicroSec连接时,可以将排序更改为Varchar排序。
就像其他人说的那样......如果你通过RowNum而不是你的连接字符串订购,你将得到一个按时间顺序的顺序。