SQL框架查询问题

时间:2011-04-11 15:18:00

标签: sql sql-server sql-server-2008

我正在运行只返回整个数据的一部分的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]列以字符串连接方式连接。 View of ordering of results from this query

正如你所看到的,排序都搞砸了。任何帮助将不胜感激。

2 个答案:

答案 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而不是你的连接字符串订购,你将得到一个按时间顺序的顺序。

相关问题