4

日付列があり、orderby句を使用しています。

今日の日付に近いレコードを上に表示し、次に過去のすべてのレコードを下に表示したいと思います。

これを単一のクエリで実行したいと思います。

私はこれを試しました

SELECT *, DATEDIFF(`date`, CURDATE()) AS diff  FROM `post` order by diff

このクエリの問題は、これが最初に過去のレコードを表示し、降順を使用すると、今日から遠く離れたレコードが一番上になることです。

どうすればこれを達成できますか?

どんな助けでもありがたいです。

4

5 に答える 5

9

次のようなことができるはずです。

SELECT *, DATEDIFF(`date`, CURDATE()) AS diff  FROM `post`
order by CASE WHEN diff < 0 THEN 1 ELSE 0 END, diff

これにより、過去の日付は現在の日付または将来の日付の後に並べ替えられます。

于 2012-07-09T13:53:41.147 に答える
3

これを試して

   SELECT *, DATEDIFF(`date`, CURDATE()) AS diff  FROM `post` order by ABS(diff)
于 2012-07-09T13:51:29.250 に答える
1

あなたはORDER BYこのように降順である必要があります:

 SELECT *, DATEDIFF(`date`, CURDATE()) AS diff  
 FROM `post ORDER BY diff DESC;
于 2012-07-09T13:50:44.803 に答える
0

なぜ単純な古い日付の順序がないのですか?

 SELECT *, DATEDIFF(`date`, CURDATE()) AS diff  
 FROM `post ORDER BY date DESC;
于 2012-07-09T13:51:42.067 に答える
0

将来的に遠すぎる結果は必要ないため、結果セットからこれらの結果を削除するだけです。

SELECT *, DATEDIFF(`date`, CURDATE()) AS diff FROM `post` 
WHERE `date` < date_add(CURDATE(), INTERVAL 1 DAY)
ORDER BY diff DESC
于 2012-07-09T13:52:05.973 に答える