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

问题描述

我想在过滤和按日期分组后按价格排序。但是,因为关系不止一种,所以无法得到想要的结果。

我想要的结果是获取最接近 end_date 的关系的价格并对其进行相应排序。

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

demo sqlfiddle

$query->join('tableB','tableA.id','=','tableB.pro_id')
        ->select('tableA.*','tableB.start_date','tableB.end_date','tableB.old_daily')
        ->where(function($sq) {
            $today = Carbon::Now()->format('Y-m-d'); 
            $sq->whereDate('end_date','>=',$today);
            })
        ->groupBy('tableA.id')
        ->orderBy('price',desc);

查询

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

表A

| 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 |

解决方法

这个查询给出了你想要的结果。 在此步骤中使用“右连接”将是一个不错的选择。

sqlfiddle

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
,

最接近 end_date 并相应地对其进行排序。

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...