2017-09-08 4 views
0

私は今この問題を何日間も疑問に思っています。T-SQL Order By - データ型の優先順位が期待どおりに動作しない

スクリプトはこのように書きます:

select * from my_table 
order by change_effective_date, unique_id desc 

change_effective_dateは、日時フィールドで、UNIQUE_IDはint型のフィールドです。

私はこれが私に最新の行(change_effective_dateの中で最も高い値を持つ行)を最初に与えると予想していました。しかし、最も古い行を最初に指定していて、unique_idも昇順になっています(これらのIDは通常はシーケンシャルなので、日付と同じ順序に従うことを期待していますが、これは完全に信頼できません)。そう、https://blog.sqlauthority.com/2010/10/08/sql-server-simple-explanation-of-data-type-precedence/

ただし、日時がintよりも優先されます:

困惑は、私がGoogleになって、そのデータ型の優先順位が低いランクのデータ型が上位のデータ型に変換された状態で、句によって順序に影響を与えることができましたこのように影響されるべきではありません。

さらに興味深いことに、order by節からunique_idを取った場合、降順の日付順でデータが完全にソートされます。 order by節に一意の識別子を追加したいのですが、同じ日付の複数の行があり、さらにスクリプトの中で最も新しいものを識別したいので(この場合、unique_idはネクタイとなります)私がそれが逐次的であると仮定しているように)。

誰でもここで何が起こっているのか説明できる場合は、本当に感謝しています!

ありがとうございました。

答えて

2
select * from my_table 
order by change_effective_date desc, unique_id desc 
+0

ありがとうございました!治療をしました。私はそれを知らなかったとは信じられません(そして、私が過去に書いたスクリプトでは、他の "秩序"事故が潜んでいるのだろうか...)。これがOracleにも当てはまりますか? –

+1

afaik – muasif80

+1

@ s.turnはい。オラクルでも同じです。 –

関連する問題