2017-09-08 8 views
0

저는이 문제에 대해 지금 당분간 당황하고 있으며, 궁극적으로 내 비속의 원인을 확인했습니다. order by 절이 예상대로 작동하지 않습니다.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보다 우선합니다 :

의아해, 나는 구글로 전환하고 해당 데이터 유형 우선 순위가 낮은 순위 데이터 유형이 더 높은 순위 데이터 형으로 변환되는으로, order by 절에 영향을 줄 수 있습니다 발견 이 방법으로 영향을 받아서는 안됩니다.

더 흥미롭게도 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

afric – muasif80

+1

@ s.turn 예. 오라클에서도 마찬가지입니다. –