날짜별로 날짜별로 주문한 다음 가장 최근 날짜
-
03-07-2019 - |
문제
SELECT 문을 실행하는 저장된 절차가 있습니다. 날짜 필드에서 내 결과를 주문하고 모든 레코드를 널 날짜와 가장 최근 날짜로 표시합니다.
성명서는 다음과 같습니다.
SELECT a,b,c,[Submission Date]
FROM someView
ORDER BY [Submission Date] ASC
이제 이것은 널 제출 날짜가 먼저 표시되는 모든 레코드를 표시하지만 날짜 값이있는 행에 도착하면 뷰에서 가장 최근 날짜가 아닙니다.
ASC를 DESC로 바꾸면 원하는 순서의 날짜가 발생하지만 NULL 값은 결과 세트의 맨 아래에 있습니다.
쿼리를 구조화하여 상단에 널 값을 표시 한 다음 날짜 값이있을 때 가장 최근에 가장 오래된 내림차순을 주문할 수있는 방법이 있습니까?
해결책
@chris, 당신은 거의 가지고 있습니다.
ORDER BY (CASE WHEN [Submission Date] IS NULL THEN 1 ELSE 0 END) DESC,
[Submission Date] DESC
편집 : #EPPZ는 현재 표시된대로 위의 코드를 조정하도록 요청했습니다.
나는 개인적으로 "마법 숫자"를 만드는 것보다 훨씬 더 선호합니다. 마법의 숫자는 거의 항상 일어나기를 기다리는 문제입니다.
다른 팁
당신은 이와 같은 일을 할 수 있습니다.
ORDER BY [Submission Date] IS NULL DESC, [Submission Date] ASC
표준 SQL (ISO/IEC 9075-2 : 2003 이상 -2008)은 다음을 제공합니다.
ORDER BY SomeColumn NULLS FIRST
대부분의 DBM은 아직 이것을 지원하지 않습니다.
노력하다
SELECT a,b,c,[Submission Date]
FROM someView
ORDER BY isnull([Submission Date],cast('2079/01/01' as datetime)) ASC
OrderBy="ColumnName = NULL desc, ColumnName desc"
이 시도
isnull ([제출 날짜], cast ( '1770/01/01'AS DATETIME))의 일부 View Order에서 A, B, C, [제출 날짜]를 선택하십시오.
나는 이것이 오래된 것을 알고 있지만 그것을 발견했을 때 받아 들여진 해결책을 발견했습니다. https://stackoverflow.com/a/821856/7177892, 사례 진술의 결과를 오늘 (getDate ()) 또는 실제 날짜로 만들어 단순화 할 수 있습니다.
원래의:
ORDER BY (CASE WHEN [Submission Date] IS NULL THEN 1 ELSE 0 END) DESC,
[Submission Date] DESC
쉽게 한:
ORDER BY (CASE WHEN [Submission Date] IS NULL
THEN GETDATE()
ELSE [Submission Date]
END) DESC