Mysql 从包含最接近今天日期的行中检索数据
我想在按日期过滤和分组后按价格排序。但是,由于存在多个关系,我无法得到我想要的结果 我想要的结果是得到最接近结束日期的关系的价格,并对其进行相应的排序 为此,查询、sql输出、表和演示页面如下所示。 提前谢谢 查询: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` = `
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