Query Mysql та же таблица два перекурсивных фильтра

добрый вечер. Я пишу ему, чтобы видеть, могут ли они помогать мне с этой консультацией, которая провела дни не добиваясь необходимого результата.

У меня есть следующая таблица в mysql:

id_servicio -> llave primaria
fecha_servicio -> datetime
id_servicio_estado
id_servicio_estado_entrega

fecha_servicio-> datetime id_empresa

Пример данных:

id_servicio | fecha_servicio | id_servicio_estado | id_servicio_estado_entrega | id_empresa

1, 2005-03-22, 2, 8, 1

1, 2017-03-01, 2, 8, 1

1, 2017-03-18, 2, 7, 1

1, 2017-04-01, 2, 8, 1

1, 2017-10-01, 1, 8, 1

Я нуждаюсь в том, чтобы иметь следующий результат.

fecha_servicio | id_servicio_estado | id_servicio_estado_entrega

marzo , 2, 1
abril , 1, 1
octubre, 0, 1

Консультация должна вручать все услуги соответствующему предприятию =1, где год был = 2017, id_servicio_estado = 2 и id_servicio_estado_entrega = 8, группируемый в месяц через тот же год, будучи результатом, упорядоченным числом месяца через год. Пример январь, февраль, март, и т.д. и т.д.

Идея состоит в том, чтобы видеть, как это query, чтобы после мочь преобразовывать это в codeignater.

Agradezo Ваша помощь по этому поводу

0
задан 21.03.2019, 05:37
2 ответа

Он старался понимать консультацию, которую ты хочешь реализовать, и я думаю, что объяснено немного плохо мне казаться, когда делать какие-то доказательства на сервере mysql с данными, что posteaste я смог замечать это, что я понял как в результате, который posteaste состоял в том, что ты хочешь выдать услуги предприятия (из-за id_empresa и aГ±o услуга) и потом делать подсчет из-за месяца полей id_servicio_estado = 2 и id_servicio_estado_entrega = 8. Если то, что я понял, правильно, следующая консультация смогла служить тебе помощью.

 SELECT     
 CASE
     WHEN tabla.mes_servicio = 1 THEN "ENERO"
     WHEN tabla.mes_servicio = 2 THEN "FEBRERO"
     WHEN tabla.mes_servicio = 3 THEN "MARZO"
     WHEN tabla.mes_servicio = 4 THEN "ABRIL"
     WHEN tabla.mes_servicio = 5 THEN "MAYO"
     WHEN tabla.mes_servicio = 6 THEN "JUNIO"
     WHEN tabla.mes_servicio = 7 THEN "JULIO"
     WHEN tabla.mes_servicio = 8 THEN "AGOSTO"
     WHEN tabla.mes_servicio = 9 THEN "SEPTIEMBRE"
     WHEN tabla.mes_servicio = 10 THEN "OCTUBRE"
     WHEN tabla.mes_servicio = 11 THEN "NOVIEMBRE"
     WHEN tabla.mes_servicio = 12 THEN "DICIEMBRE"
 ELSE "ERROR MES"
 END AS 'mes',
 SUM(tabla.id_servicio_estado) AS servicioEntrega2,
 SUM(tabla.id_servicio_estado_entrega) AS servicioEstadoEntrega8

 FROM
 (
     SELECT MONTH(p.fecha_servicio) AS mes_servicio,
     CASE
         WHEN p.id_servicio_estado = 2  THEN 1
         ELSE 0
     END AS 'id_servicio_estado',
     CASE
         WHEN P.id_servicio_estado_entrega = 8 THEN 1
         ELSE 0
     END AS 'id_servicio_estado_entrega'
     FROM prueba p
     WHERE YEAR(p.fecha_servicio) = 2017 AND p.id_empresa = 1

 ) tabla
 GROUP BY tabla.mes_servicio
 ORDER BY tabla.mes_servicio ASC

Замечает: Hize доказательство с данными, которое posteaste, utilize таблица так называемое доказательство, чтобы не иметь проблемы на твоем сервере после того, как скроллировать консультацию, только меняет имя таблицы ^_^.

0
ответ дан 02.12.2019, 05:21
  • 1
    Привет как дела, если я я функционирую правильно. – Ricardo P 22.03.2019, 03:58
  • 2
    Консультируйся, как он был бы, если он состоит в том, что у меня есть два поля различных дат, но продолжил быть результат группируемым в месяц. Пример: Я имею fecha_servicio (для id_servicio_estado = 2) и fecha_servicio_entrega (для id_servicio_estado_entrega = 8). Если id_servicio_estado = 2 и она fecha_servicio например... - апрель, который сложил 1 и в случае, если fecha_servicio_entrega будет также апрелем, сложит другой 1, оставаясь таким: апрель 1 для servicioEntrega2 и 1 для servicioEstadoEntrega8 – Ricardo P 22.03.2019, 04:06
  • 3
    Привет, возможно, если ты добавляешь algú n пример вышеупомянутого требования, которое у тебя есть, с данными, что posteaste, он мог бы помогать тебе. Привет. – xxelecmanxx 22.03.2019, 04:20

Есть проблема, с которым ты просишь, ты хочешь группировать данные в месяц, но estГЎs понимая, что id_servicio_estado и id_empresa они равны, ты не можешь группировать в месяц и доставать эти данные правильно.

облегчил Тебе query для того, чтобы он подал тебя guГ - в, конечно то, в чем ты нуждаешься, было чем-то сходным:

SELECT 
    DATE_FORMAT(fecha_servicio,"%M"), 
    GROUP_CONCAT(id_servicio_estado), 
    GROUP_CONCAT(id_empresa)
WHERE YEAR(fecha_servicio) = 2017
    AND id_servicio_estado = 2 
    AND id_servicio_estado_entrega = 8
GROUP BY DATE_FORMAT(fecha_servicio,"%M"), MONTH(fecha_servicio)
ORDER BY MONTH(fecha_servicio);
0
ответ дан 02.12.2019, 05:21