如何只返回belongsto表中带有特定条件的summary值

toe95027  于 2021-06-18  发布在  Mysql
关注(0)|答案(0)|浏览(209)

所以我的数据库里有这种报表

+---------+------------+-------+
| Company |  periods   | value |
+---------+------------+-------+
| a1      | 01-01-2018 |  1000 |
| a1      | 01-02-2018 |   600 |
| a2      | 01-01-2018 |   500 |
| a2      | 01-03-2018 |   500 |
| a3      | 01-01-2018 |   500 |
| a3      | 01-02-2018 |   500 |
| a3      | 01-03-2018 |   500 |
+---------+------------+-------+

这张table有 belongsTo 与具有软删除功能的公司表的关系

+----+------+---------------------+---------------------+
| id | name |     created_at      |     deleted_at      |
+----+------+---------------------+---------------------+
| a1 | zzzz | 2018-09-30 08:45:27 | null                |
| a2 | xxxx | 2018-03-02 15:35:01 | 2018-02-26 15:35:01 |
| a3 | yyyy | 2018-12-15 14:20:33 | null                |
+----+------+---------------------+---------------------+

现在从已经有答案的问题继续。在这个问题上,我想展示每个公司特定时期的价值总和,这是可行的。
现在我发现了我需要的另一个要求,它有点复杂,所以从第一个问题开始,我也喜欢,例如,当我想从01-02-2018期间求和时,它会显示为这样(这同样已经有了上述问题的答案)

+---------+------------+-------+
| Company |  periods   | value |
+---------+------------+-------+
| a1      | 01-02-2018 |  1600 |
| a2      | 01-02-2018 |   500 |
| a3      | 01-02-2018 |  1000 |
+---------+------------+-------+

这里的问题是,如果我想从2018年3月1日开始求和,那么它将只显示公司a1和a3,因为a2在2018年2月26日关闭/删除,所以它将超出总和

+---------+------------+-------+
| Company |  periods   | value |
+---------+------------+-------+
| a1      | 01-03-2018 |  1600 |
| a3      | 01-03-2018 |  1500 |
+---------+------------+-------+

怎么做?我尝试添加报表模型

public function Company()
{
    return $this->belongsTo('App\Company','company','id')->where('deleted_at',null);
}

然后就

$sum = Report::with('Company')->addSelect(DB::row('Company, max(periods) AS periods, sum(value) AS value'))
    ->groupBy('Company')
    ->where('periods', '<=', $maxDate)
    ->get();

但它不起作用。。。。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题