2016-10-11 6 views
2

テーブルに有効期限の列があります。有効期限が切れているレコードをフェッチします。私は 'ORDER BY DATE DESC'を使いましたが、降順で日付を並べるだけです。 '日付順' を使用してSQL Serverの条件に基づいて日付を並べ替え

出力

2016-10-31 
2016-10-06 
2016-03-10 

所望の出力:

2016-10-06 
2016-10-31 
2016-03-10 
+3

ようなものになるだろうと思います希望の出力? –

+0

彼は、データを毎月の降順と日の昇順で並べ替えることを望んでいます。 – Teja

+0

今日の日付に近いレコードを取得します。 – MDP

答えて

0

はゴードンがあるほど不安な華麗な、私が見落としがあったと思います。

Declare @YourTable table (Date date) 
Insert Into @YourTable values 
('2016-10-14'),   -- Added 10/14 +4 Days 
('2016-10-31'), 
('2016-10-06'), 
('2016-03-10') 

Select *, NDays=datediff(day, getdate(), [date]) 
From @YourTable 
Order By abs(datediff(day, getdate(), [date])) 

戻り

Date  NDays 
2016-10-14 4   << Record Added (Should be below 10/6) 
2016-10-06 -4 
2016-10-31 21 
2016-03-10 -214 

私が最も安全な(とはるかに少ないエレガントで)ためのロジックである何より、この

Select *, NDays=datediff(day, getdate(), [date]) 
From @YourTable 
Order By Year(Date) Desc,Month(Date) Desc,Day(Date) 

戻り

Date  NDays 
2016-10-06 -4 
2016-10-14 4 
2016-10-31 21 
2016-03-10 -214 
+0

はあなたのポイントを得ました。私は違いを見る – MDP

3

が、これはあなたが何をしたいですか?

order by abs(datediff(day, getdate(), [date])) 
+0

それは動作します!すばらしいです!ありがとう!ちなみに – MDP

+0

by absさん、何ですか? – MDP

+2

@MDP - 'ABS'はすべての値を正の値に変換します。ここに公式のドキュメンテーションのリンクがあります。https://msdn.microsoft.com/en-us/library/ms189800.aspx –

1

以下の2つのSQLがあります。

1) First sort by date in descending order 
2) With in each month sort the dates in ascending order of day. 

(以下DATEPART関数は、DATEからDAYを計算します。)

SELECT * 
    FROM DATA 
ORDER BY DATEPART(MONTH, date) DESC, DATEPART(DAY, date); 
+0

エイリアスを 'order by'でチェックしますか? btw、sqlサーバには 'extract'関数がありません。 –

+0

動作しません。同じ出力は日付順の順序を使用しています。 – MDP

+0

今すぐお試しください。私は月を抽出し、降順でソートしてから、データを昇順にソートします。 – Teja

関連する問題