Php SQL获取最近的日期记录

Php SQL获取最近的日期记录,php,sql,yii,Php,Sql,Yii,这是一个示例数据: Booking_id Name start_date 1 abc 1/1/2018 2 efg 5/2/2018 3 pqr 16/1/2018 4 xyz 19/2/2018 我希望它的顺序最接近于顶部的今天日期和最后的过去日期,使用sql函数的顺序。像这样: SELECT * FROM table_name ORDER

这是一个示例数据:

 Booking_id   Name   start_date
   1            abc   1/1/2018
   2            efg   5/2/2018
   3            pqr   16/1/2018
   4            xyz   19/2/2018
我希望它的顺序最接近于顶部的今天日期和最后的过去日期,使用sql函数的顺序。像这样:

SELECT * 
FROM 
     table_name 
ORDER BY 
   start_date DESC;
使用sql的ORDER BY函数。像这样:

SELECT * 
FROM 
     table_name 
ORDER BY 
   start_date DESC;

根据我的理解,以下是您的疑问,请让我进一步了解

Use可根据需要与ASC | Desc一起使用订单

select * from booking_table order by start_date DESC;

根据我的理解,以下是您的疑问,请让我进一步了解

Use可根据需要与ASC | Desc一起使用订单

select * from booking_table order by start_date DESC;
您需要在列开始日期上使用SORT desc函数。下面是将生成所需结果的查询

select * from table1
order by Start_Date desc;
select * from table1
order by Start_Date asc;
您可以查看sqlfiddle演示

如果日期在将来,你必须使用asc来获得你想要的结果

select * from table1
order by Start_Date desc;
select * from table1
order by Start_Date asc;
如果您的日期是过去和未来日期的混合,如下面的示例数据

ID Name   Start_Date
---------------------
1  abc   2018-01-01
2  efg   2018-02-05
3  pqr   2018-01-16
4  xyz   2018-02-19
1  abc   2017-01-01
2  efg   2017-02-05
3  pqr   2017-01-16
4  xyz   2017-02-19
下面的查询可以是以更友好的格式显示数据的选项

select * from (
select * from table1
where start_date < current_date
order by start_date desc
) as B
union
select 0,'TODAY_DATE', current_date
union
select * from (
select * from table1
where start_date > current_date
order by start_date asc
) as A 
选中SQLFIDLE demo

您需要在列开始日期使用SORT desc函数。下面是将生成所需结果的查询

select * from table1
order by Start_Date desc;
select * from table1
order by Start_Date asc;
您可以查看sqlfiddle演示

如果日期在将来,你必须使用asc来获得你想要的结果

select * from table1
order by Start_Date desc;
select * from table1
order by Start_Date asc;
如果您的日期是过去和未来日期的混合,如下面的示例数据

ID Name   Start_Date
---------------------
1  abc   2018-01-01
2  efg   2018-02-05
3  pqr   2018-01-16
4  xyz   2018-02-19
1  abc   2017-01-01
2  efg   2017-02-05
3  pqr   2017-01-16
4  xyz   2017-02-19
下面的查询可以是以更友好的格式显示数据的选项

select * from (
select * from table1
where start_date < current_date
order by start_date desc
) as B
union
select 0,'TODAY_DATE', current_date
union
select * from (
select * from table1
where start_date > current_date
order by start_date asc
) as A 

选中SQLfiddle demo

您想要的是从todate算起的最接近的日期,这样您就可以尝试跟踪查询了

SELECT * FROM table 
WHERE start_date >= now()
ORDER BY start_date ASC;

如果你想让它按顺序排列,那么:

SELECT * FROM table 
WHERE start_date <= now()
ORDER BY start_date DESC;

您需要最接近todate的日期,以便可以尝试跟踪查询

SELECT * FROM table 
WHERE start_date >= now()
ORDER BY start_date ASC;

如果你想让它按顺序排列,那么:

SELECT * FROM table 
WHERE start_date <= now()
ORDER BY start_date DESC;

您可以使用以下查询:

SELECT Booking_id, Name, start_date
FROM mytable
ORDER BY ABS(DATEDIFF(start_date, NOW()));
ORDER BY子句按照距离今天日期的天数进行排序。距离最小的日期排在第一位


您可以使用以下查询:

SELECT Booking_id, Name, start_date
FROM mytable
ORDER BY ABS(DATEDIFF(start_date, NOW()));
ORDER BY子句按照距离今天日期的天数进行排序。距离最小的日期排在第一位

这对你有用

按开始日期描述从表中选择*名称顺序

这适合你


按开始日期描述从表中选择*名称顺序

根据您的一条评论:

今天的记录接着是未来的记录,然后是旧记录 结束

这将首先对今天和将来的日期进行排序,然后是过去的日期:

ORDER BY 
   CASE WHEN start_date >= CURRENT_DATE THEN 1 ELSE 2 END,
   start_date
如果希望旧日期按降序排序,则会产生按升序排序的新日期和旧日期:

ORDER BY 
   CASE WHEN start_date >= CURRENT_DATE THEN 1 ELSE 2 END,
   ABS(CURRENT_DATE - start_date)

根据您的一条评论:

今天的记录接着是未来的记录,然后是旧记录 结束

这将首先对今天和将来的日期进行排序,然后是过去的日期:

ORDER BY 
   CASE WHEN start_date >= CURRENT_DATE THEN 1 ELSE 2 END,
   start_date
如果希望旧日期按降序排序,则会产生按升序排序的新日期和旧日期:

ORDER BY 
   CASE WHEN start_date >= CURRENT_DATE THEN 1 ELSE 2 END,
   ABS(CURRENT_DATE - start_date)


您正在使用哪些RDBMS?开始日期字段的数据类型是什么?我正在使用的mysql DBstart\U date的可能重复项是datetime数据类型您正在使用的RDBMS?开始日期字段的数据类型是什么?我正在使用的mysql DBstart\U date的可能重复项是datetime数据类型此返回记录的顺序与日期相反,而不是最接近的日期今天此退货记录的顺序与今天相反,不是与今天最接近的日期此退货记录的顺序与日期相反,不是与今天日期最接近的记录亲爱的Paritosh,从今天开始的反向顺序意味着它将以降序排列到今天日期的最接近的记录。此按日期反向排列的返回记录不是到今天日期的最接近记录亲爱的Paritosh,从今天开始的反向顺序意味着相同。它将以降序方式呈现最近的记录到今天的日期。感谢您的响应它解决了我的一半问题现在我正在获取今天日期的记录,但我希望我的旧记录被附加到最后。我如何才能做到这一点?是的,我已经尝试过它,它将返回今天和将来的记录但不是开始日期<今天日期的记录我希望这些记录在末尾你想要所有记录吗?今天未来和过去?是的,顺序是这样的-今天的记录之后是未来的记录,然后是结尾处的旧记录谢谢您的回复它解决了我的一半问题现在我正在从今天的日期获取记录,但我希望我的旧记录在结尾处附加我该怎么做?是的,我已经尝试过,没有限制它返回今天的记录和来自将来但不是开始日期<今天日期的记录我希望此记录位于末尾您想要所有记录吗?今天,未来和过去?是的,顺序是这样的——今天的记录接着是未来的记录,最后是旧记录