mySQL如何从限制日期中选择同一字段中的一些数据

mySQL如何从限制日期中选择同一字段中的一些数据,mysql,Mysql,我通过查询从表中获取数据 SELECT dt, place FROM horseri WHERE horseid = 'C299' AND dt < '20200715' ORDER BY dt DESC 我怎样才能在最后10个日期之前从数据中获得前3个获奖名额 我的预期产出将是 dt | place ---------------------- 2020-06-07 | 2 2020-05-17 | 3 2020-03-01 | 3 2019-12-18 | 3 使

我通过查询从表中获取数据

SELECT dt, place
FROM horseri
WHERE horseid = 'C299'
AND dt < '20200715'
ORDER BY dt DESC 
我怎样才能在最后10个日期之前从数据中获得前3个获奖名额

我的预期产出将是

dt         | place
----------------------
2020-06-07 | 2
2020-05-17 | 3
2020-03-01 | 3
2019-12-18 | 3

使用子查询获取最近的10个日期。然后从中选择前3个位置

SELECT dt, place
FROM (
    SELECT dt, place
    FROM horseri
    where horseid = 'C299'
    ORDER BY dt DESC
    LIMIT 10
) as x
WHERE place <= 3

假设巴尔马的答案是OP想要的,那么写巴尔马答案的更现代的方式是使用ROW_编号:


请包含您上面提供的19行样本数据的预期输出。@TimBiegeleisen很抱歉缺少预期输出。我已经把问题编辑好了。这很简单。谢谢你,如果我想将第一、第二和第三名这样的获奖地点与上述条件隔离,是否有可能?我在dt的订单附近运行查询时出错desc@KopiBryant那么也许你还在使用MySQL 5.x。不过,我给出的答案可能是在MySQL 8+上编写查询的首选方式,因此我将不讨论这个问题。
SELECT dt, place
FROM (
    SELECT dt, place
    FROM horseri
    where horseid = 'C299'
    ORDER BY dt DESC
    LIMIT 10
) as x
WHERE place <= 3
SELECT dt, place
FROM
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY dt DESC) rn
    FROM horseri
    WHERE horseid = 'C299'
) t
WHERE rn <= 10 AND place <= 3;
WHERE rn <= 10 AND place = 2