以相反的顺序选择x个记录小于日期

时间:2015-09-11 20:41:24

标签: mysql sql-order-by

我有一个表格,其中日期是列之一。假设日期按升序排序。

我试图以相反的顺序以特定的给定日期之前的升序获取7条记录。

示例

======================
ID           Date
=======================
1           2016-09-01
2           2016-09-03
3           2016-09-07
4           2016-09-09
5           2016-09-13
6           2016-09-15
7           2016-09-19
8           2016-09-22
9           2016-09-23

假设我想以相反的顺序选择按升序排列的3条记录,小于2016-09-15。

我需要的输出是

************************
ID           Date
=======================
3           2016-09-07
4           2016-09-09
5           2016-09-13

我如何在MySQL中实现这一目标?

3 个答案:

答案 0 :(得分:1)

如果我理解你的问题,那应该是这样的:

SELECT *
FROM (
  SELECT *
  FROM Example
  WHERE
    my_date<'2016-09-15'
  ORDER BY
    my_date DESC
  LIMIT 3
) s
ORDER BY my_date ASC

请查看小提琴here

答案 1 :(得分:0)

这应该有效:

select  * FROM table where date_field < 'some_date' order by date_field desc LIMIT 7

答案 2 :(得分:0)

ORDER BY和LIMIT在一起使用时可能会有点棘手。

如果您需要的日期早于日期并且最先排序 @fthiella建议的查询应该有效。

同样适用于您需要晚于日期的记录并且最早排序的记录。你只需要按日期订购。

如果您需要的记录早于最早排序的日期,则不能在单个查询中排序和限制。

您可能需要执行类似

的操作
select my_date from 
(
select my_date from 
    my_table where my_date < '08/24/2014' 
    order by my_date desc
    limit 7
 ) a 
 order by my_date 

desc的外部订单或不是基于您想要的订单。