Eu tenho uma tabela na estrutura abaixo.
phone bigint
answer_time datetime
Devo agrupar todos os números de telefone e seu número total de tentativas e mencionar o número: de tempo atendido e o número de tempo não atendido. Para isso, a condição é answer_time='0000-00-00 00:00:00' para não atendida e answer_time > '0000-00-00 00:00:00' para atendida. Pode haver qualquer número de vezes que a chamada foi feita para um número específico. Qualquer sugestão ou abordagem seria útil. Estou terrivelmente preso a isso.
O resultado deve ser:
+----------------+---------------+--------------------+--
| phone | count(*) | NOT_ANSWERED | ANSWERED |
+---------------+----------+------------+------------+-----+
| 7260513 | 2 | 1 | 1 |
+------------+----------+------------+--------------------+
Neste, na primeira tentativa a chamada é atendida na segunda não. As tentativas podem variar no máximo até 16 vezes.
PARA MÁX
mysql> select phone, answer_time from cdr_test;
+------------+---------------------+
| phone | answer_time |
+------------+---------------------+
| 31389966 | 0000-00-00 00:00:00 |
| 31389966 | 0000-00-00 00:00:00 |
| 31389966 | 0000-00-00 00:00:00 |
| 31389966 | 0000-00-00 00:00:00 |
| 31389966 | 0000-00-00 00:00:00 |
| 31389966 | 0000-00-00 00:00:00 |
| 31389966 | 0000-00-00 00:00:00 |
| 31389966 | 0000-00-00 00:00:00 |
| 31389966 | 0000-00-00 00:00:00 |
| 31389966 | 0000-00-00 00:00:00 |
| 31389966 | 0000-00-00 00:00:00 |
| 31389966 | 0000-00-00 00:00:00 |
| 31389966 | 0000-00-00 00:00:00 |
+------------+---------------------+
13 rows in set (0.00 sec)
mysql> select phone, Count(*), Count(CASE WHEN Time(answer_time) = 0 THEN 1 end ) AS NOT_ANSWERED, Count(CASE WHEN Time(answer_time) > 0 THEN 1 end) AS ANSWERED FROM cdr_test GROUP BY phone;
+------------+----------+--------------+----------+
| phone | Count(*) | NOT_ANSWERED | ANSWERED |
+------------+----------+--------------+----------+
| 31389966 | 13 | 0 | 0 |
+------------+----------+--------------+----------+
1 row in set (0.00 sec)
Não é aconselhável usar o tipo Datetime para seu answer_time, altere-o para o tipo TIME porque o 000-00-00 falhará com todas as funções datetime (consulte a documentação do MySQL: link ).
Então, quando sua tabela se parece com:
Você poderia tentar isso:
máx.
Isso precisa de um complemento para a abordagem Max.