2015-10-28 46 views
0

试图了解为什么除非使用ORDER BY你不能保证任何结果为了这个查询产生的降序排列为什么此SQL查询以降序返回数据?

SELECT 
    DateDiff(minute, convert(datetime, SUBSTRING(MSH_07_DateTime, 1, 8) + ' ' + SUBSTRING(MSH_07_DateTime, 9, 2) + ':' + SUBSTRING(MSH_07_DateTime, 11, 2), 100), GetDate()) 
FROM 
    EPDBHL7.DBO.[HL7MSH] 
WHERE 
    MessageStatus <> 'ok' 
+7

没有ORDER BY的订单是未指定的。 – jarlh

+0

如果您不想深入讨论执行计划等话题,您的问题的答案只能是“纯粹运气” - 并且准备好明天订单可能会有所不同。 –

回答

2

结果。所以,你可能会得到总部设在如何存储数据或策划者使用索引

如何获取数据只是添加

where MessageStatus <> 'ok' 
order by DateDiff(minute,convert(datetime, SUBSTRING (MSH_07_DateTime ,1 , 8) + ' '+ SUBSTRING (MSH_07_DateTime ,9 , 2) + ':'+ SUBSTRING (MSH_07_DateTime ,11 , 2), 100) 
or 
order by 1 

命令使用第一列

+0

降序实际上正是我需要的!只是想明白为什么它的工作方式。这个逻辑不是我的 –

+0

问题是你正在把事情交给运气或刨床实施。如果在稍后的db版本规划器中有不同的算法,则可能会得到意想不到的结果。所以如果你的数据需要排序包括'order by' –

0

如果没有指定的顺序ORDER BY子句,然后你将得到结果的顺序是未指定的。

如果你想依靠一个查询的顺序,除非使用ORDER BY随时添加ORDER BY

0
Select DateDiff(minute,convert(datetime, SUBSTRING (MSH_07_DateTime ,1 , 8) + ' '+ SUBSTRING (MSH_07_DateTime ,9 , 2) + ':'+ SUBSTRING (MSH_07_DateTime ,11 , 2), 100) as date_diff,GetDate()) 
FROM EPDBHL7.DBO.[HL7MSH] 
where MessageStatus <> 'ok' 
order by date_diff DESC 
0

,你得到的结果是物理存储的方式。它可能按照正确的顺序排列,但不是以编程方式按顺序排列。

+1

不需要物理顺序。您还可以获得索引如何扫描表 –

+0

是的顺序。这也是事实。 – Doruk

相关问题