Mysql 从包含最接近今天日期的行中检索数据

Mysql 从包含最接近今天日期的行中检索数据,mysql,laravel,octobercms,Mysql,Laravel,Octobercms,我想在按日期过滤和分组后按价格排序。但是,由于存在多个关系,我无法得到我想要的结果 我想要的结果是得到最接近结束日期的关系的价格,并对其进行相应的排序 为此,查询、sql输出、表和演示页面如下所示。 提前谢谢 查询: select `tableA`.*, `tableB`.`start_date`, `tableB`.`end_date`, `tableB`.`price` from `tableA` inner join `tableB` on `tableA`.`id` = `

我想在按日期过滤和分组后按价格排序。但是,由于存在多个关系,我无法得到我想要的结果

我想要的结果是得到最接近结束日期的关系的价格,并对其进行相应的排序

为此,查询、sql输出、表和演示页面如下所示。 提前谢谢

查询:

select `tableA`.*, `tableB`.`start_date`, `tableB`.`end_date`, `tableB`.`price` 
from `tableA` 
    inner join `tableB` on `tableA`.`id` = `tableB`.`pro_id` 
where (date(`end_date`) >= 2021-03-07) 
group by `tableA`.`id` 
order by `price` desc

| id | title |
|----|-------|
|  1 |  pro1 |
|  2 |  pro2 |
|  3 |  pro3 |
表B

| id | start_date |   end_date | price | pro_id |
|----|------------|------------|-------|--------|
|  1 | 2021-06-01 | 2021-06-05 |   750 |      2 |
|  2 | 2021-05-01 | 2021-05-05 |   850 |      2 |
|  3 | 2021-04-01 | 2021-04-05 |   650 |      2 |
|  4 | 2021-06-01 | 2021-06-05 |  2750 |      1 |
|  5 | 2021-05-01 | 2021-05-05 |  2850 |      1 |
|  6 | 2021-04-01 | 2021-04-05 |  2650 |      1 |
|  7 | 2021-06-01 | 2021-06-05 |  1750 |      3 |
|  8 | 2021-05-01 | 2021-05-05 |  1850 |      3 |
|  9 | 2021-04-01 | 2021-04-05 |  1650 |      3 |
最接近结束日期,并相应地对其进行排序

您应该找到给定日期和结束日期之间的差异,然后按升序排序

ORDER BY DATEDIFF(end_date, '2021-03-07') ASC

此查询提供您想要的结果。 在这一步中使用“右连接”将是一个很好的选择


我不明白你的意思。你能把这个应用到我提供的演示链接上吗?很有效,谢谢
ORDER BY DATEDIFF(end_date, '2021-03-07') ASC
select `tableA`.*, `tableB`.`start_date`, `tableB`.`end_date`, `tableB`.`price`
  from `tableA` 
    right join(
    SELECT id, start_date, end_date, pro_id, price, DATEDIFF(`tableB`.`end_date`, '2021-03-07') diff
    FROM `tableB`
    GROUP BY id order by diff asc
  ) `tableB` on `tableA`.`id` = `tableB`.`pro_id`
      where (date(`end_date`) >= '2021-03-07')
        group by `tableA`.`id`
          order by `price` desc