Mysql在条件[关闭]下重复计数多个值

问题描述 投票:0回答:2

我有一个名为call_history的表,如下所示

+----+--------+------------+------------+
| ID | Name   | Number     | Date       |
+----+--------+------------+------------+
| 1  | Name 1 | 9876543210 | 19-01-2020 |
+----+--------+------------+------------+
| 2  | Name 2 | 6543210789 | 19-01-2020 |
+----+--------+------------+------------+
| 3  | Name 1 | 9876543210 | 19-01-2020 |
+----+--------+------------+------------+
| 4  | Name 4 | 1478523690 | 20-01-2020 |
+----+--------+------------+------------+
| 5  | Name 1 | 9876543210 | 20-01-2020 |
+----+--------+------------+------------+
| 6  | Name 2 | 6543210789 | 20-01-2020 |
+----+--------+------------+------------+

我想要一个类似下面的结果,该结果显示在重复列上从01-01-2020到20-01-2020之间有多少来自相同名称和号码的呼叫。

+----+--------+------------+------------+--------+
| ID | Name   | Number     | Date       | Repeat |
+----+--------+------------+------------+--------+
| 1  | Name 1 | 9876543210 | 19-01-2020 | 3      |
+----+--------+------------+------------+--------+
| 2  | Name 2 | 6543210789 | 19-01-2020 | 2      |
+----+--------+------------+------------+--------+
| 3  | Name 1 | 9876543210 | 19-01-2020 | 3      |
+----+--------+------------+------------+--------+
| 4  | Name 4 | 1478523690 | 20-01-2020 | 1      |
+----+--------+------------+------------+--------+
| 5  | Name 1 | 9876543210 | 20-01-2020 | 3      |
+----+--------+------------+------------+--------+
| 6  | Name 2 | 6543210789 | 20-01-2020 | 2      |
+----+--------+------------+------------+--------+
php mysql laravel
2个回答
0
投票

像这样使用group byselect count

$from = \Carbon\Carbon::parse('01-01-2020')->format('Y-m-d');
$to = \Carbon\Carbon::parse('20-01-2020')->format('Y-m-d');
CallHistory::whereBetween(DB::raw("STR_TO_DATE(date, '%d-%m-%Y')", [$from, $to])
           ->groupBy('name', 'number')
           ->selectRaw('id, name, number, date, COUNT(id) AS repeat')->get();

0
投票

假设您固定日期,从表中加入进行计数的子查询

select t.*,cnt
from t
join (select name,number,
      count(*) as cnt from t group by name,number) s 
        on s.name = t.name and s.number = t.number
where date between '2020-01-19' and '2020-01-20'
;
© www.soinside.com 2019 - 2024. All rights reserved.