2015-10-28 75 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

相關問題