Rad*_*hiu 2 sql sql-order-by sql-server-2008
我有一个带有时间戳列和一些其他char列的表.我已按时间戳排序表中的信息,但由于同一时间戳上有更多记录,我不知道显示的顺序是否是它们在表中插入的顺序.
可悲的是桌面上没有索引,所以除了时间戳之外,我没有其他任何东西可以用来订购它们.
例:
Timestamp | Foregin table | Foreign table value
2012-10-09 19:29:50.000 | tableA | "random string here"
2012-10-09 19:29:50.000 | tableA | "different string here"
2012-10-09 19:29:50.000 | tableB | "another random string here"
2012-10-09 19:29:50.000 | tableC | "string here"
2012-10-09 19:29:50.000 | tableD | "another string here"
Run Code Online (Sandbox Code Playgroud)
我运行的查询是这样的:
SELECT *
FROM TABLE
WHERE Timestamp BETWEEN 'x' and 'y'
ORDER BY Timestamp
Run Code Online (Sandbox Code Playgroud)
回顾我的结果我假设,但我不确定,查询返回指定列排序的数据,并继续按下一列/列排序结果,以防有多于一列,以升序方式(也许是按文字长度或按字母顺序排列).
能否帮我澄清一下这种情况,因为找到订单对我来说非常重要.
对于未指定的查询,SQL Server通常没有订单保证ORDER BY.因此,a SELECT * FROM Tbl本质上可以以任意随机顺序返回行.由于数据存储在磁盘上的方式,如果您有一个空的缓存而服务器上没有其他活动,您将以相当高的概率获得磁盘顺序的数据.如果您的服务器上存在其他并发查询且缓存不为空,则该概率会显着下降.因此,虽然您可能会在测试中观察到特定行为,但您在生产中不会获得相同的行为.
也就是说,如果您需要以特定顺序返回行,则需要指定适当的ORDER BY子句.在上面的情况中,您可以使用ORDER BY [Timestamp], [Foreign table], [Foreign table value]以确保记录始终以相同的顺序返回.如果您的查询包含更多列,并且它们都不是唯一的,您还需要将所有这些列添加到其中ORDER BY.但请记住,涉及的列越多,排序越昂贵.