SQL获取最近的日期记录

时间:2017-08-18 05:22:49

标签: 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

我希望这是在最近的日期和最后的过去日期最接近

的顺序

7 个答案:

答案 0 :(得分:5)

您需要在SORT列上使用desc start_Date个功能。以下是将产生您想要的结果的查询。

select * from table1
order by Start_Date desc;

您可以查看sqlfiddle demo here

如果日期是将来的日期,则必须使用asc来获得所需的结果。

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 

它会按desc顺序对过去的日期数据进行排序,然后将TODAY日期添加到结果中,然后以asc格式添加未来数据,如下所示。

 ID  Name        Start_Date
--------------------------
4   xyz         2017-02-19
2   efg         2017-02-05
3   pqr         2017-01-16
1   abc         2017-01-01
0   TODAY_DATE  2017-08-18
1   abc         2018-01-01
3   pqr         2018-01-16
2   efg         2018-02-05
4   xyz         2018-02-19

检查SQLfiddle demo here

答案 1 :(得分:2)

使用sql的ORDER BY函数。像这样:

SELECT * 
FROM 
     table_name 
ORDER BY 
   start_date DESC;

答案 2 :(得分:1)

根据我的理解,下面是您的查询,请进一步了解。

使用可以根据需要使用“依据ASC | Desc”,

Marker

答案 3 :(得分:1)

您希望最近的日期来自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;

答案 4 :(得分:1)

您可以使用以下查询:

SELECT Booking_id, Name, start_date
FROM mytable
ORDER BY ABS(DATEDIFF(start_date, NOW()));

ORDER BY子句按从今天的日期开始的距离排序。首先是距离最小的日期。

Demo here

答案 5 :(得分:1)

这对你有用,

select * from table_name Order By start_date Desc;

答案 6 :(得分:1)

根据您的一条评论:

  

今天的记录遵循未来的记录,然后是旧的记录   端

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

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)