SQL 按发布日期或编辑日期按离当前时间最近的时间排序
SQL order by date posted or date edited by the closest time to current
我需要按编辑日期或发布日期排序。
例如,如果发布的项目日期是 2018-03-16 20:40:00 并且编辑的另一个项目日期是 2018-03-16 21:40:00 我想首先显示最接近当前发布日期的项目或编辑日期。
我试过这个:
"SELECT * FROM table ORDER BY date_posted DESC, date_edited DESC LIMIT 20"
但是,如果 date_edited 是更高的时间,那么在 date_posted 中它显示该项目 (date_edited) 和之后的其他项目没有按时间订购。
我也试过:
"ORDER BY date_posted DESC OR date_edited DESC..."
但这根本不起作用。
所以基本上,我想在 date_posted 或 date_edited 之前订购它以简化它。
很多数据库都支持greatest()
函数。您可以使用:
SELECT t.*
FROM table t
ORDER BY GREATEST(date_posted, date_edited) DESC
LIMIT 20;
对于那些不熟悉的人,您可以使用 CASE
轻松模拟逻辑。
SELECT *,
CASE WHEN date_posted > date_edited THEN date_posted
ELSE date_edited
END AS sorting_date
FROM table
ORDER BY sorting_date
我需要按编辑日期或发布日期排序。 例如,如果发布的项目日期是 2018-03-16 20:40:00 并且编辑的另一个项目日期是 2018-03-16 21:40:00 我想首先显示最接近当前发布日期的项目或编辑日期。
我试过这个:
"SELECT * FROM table ORDER BY date_posted DESC, date_edited DESC LIMIT 20"
但是,如果 date_edited 是更高的时间,那么在 date_posted 中它显示该项目 (date_edited) 和之后的其他项目没有按时间订购。
我也试过:
"ORDER BY date_posted DESC OR date_edited DESC..."
但这根本不起作用。
所以基本上,我想在 date_posted 或 date_edited 之前订购它以简化它。
很多数据库都支持greatest()
函数。您可以使用:
SELECT t.*
FROM table t
ORDER BY GREATEST(date_posted, date_edited) DESC
LIMIT 20;
对于那些不熟悉的人,您可以使用 CASE
轻松模拟逻辑。
SELECT *,
CASE WHEN date_posted > date_edited THEN date_posted
ELSE date_edited
END AS sorting_date
FROM table
ORDER BY sorting_date