我有一个名为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 |
+----+--------+------------+------------+--------+
像这样使用group by
和select 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();
假设您固定日期,从表中加入进行计数的子查询
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'
;