PHP - Consulta SQL

 
Vista:
sin imagen de perfil

Consulta SQL

Publicado por Sebastian (11 intervenciones) el 11/01/2023 18:26:14
Hola a todos... me gustaría saber como se podría crear una consulta en SQL para que devuelve cierta informacion:

Tengo una "tabla1" con los siguientes datos: id_cons, id_persona, confeccion_doc, firma1, contacto, firma2, fecha

En el campo "contacto" la posible data es la siguiente:
Se agenda firma en lugar1
Se agenda firma en lugar2
No contesta
Numero equivocado


Una persona podría tener varios intentos de "contactos", podría tener un registro "No contesta" y luego por ejemplo "Se agenda firma en lugar1" (osea ya tendría 2 registros)

Entonces cuando hago el COUNT me devuelve los 2 o mas registros que podría tener la persona, pero necesito que solamente me cuenta un registro por persona (de todas las personas que tenga la tabla1) el ultimo (que podría ser quizás por la fecha?)

Por ejemplo, tengo 5 personas
Persona1: Se agenda firma en lugar1
Persona2: No contesta, No contesta, Numero equivocado
Persona3: No contesta, Se agenda firma en lugar2
Persona4: Se agenda firma en lugar2
Persona5: No contesta, No contesta

Y luego me muestre:
Se agenda firma en lugar1 -> 1
Se agenda firma en lugar2 -> 2
No contesta -> 1
Numero equivocado -> 1

Espero me haya explicado bien y Muchas gracias !
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Consulta SQL

Publicado por Jefferson (203 intervenciones) el 12/01/2023 21:48:52
Hola un poco complejo tu script

Te prepare algo al vuelo, quizás se consiga con funciones mas limpias pero fue lo que se me ocurrió de momento

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$fIn = '2022-12-01';
$fFn = '2023-01-12';
$qA = "SELECT * from tabla1 where fecha between '" . $fIn . "' and '" . $fFn . "' group by id_persona";
$rA = $bd->query($qA);
while ($fA = $rA->fetch_array()) {
    $persona[] = $fA[1];
}
foreach ($persona as $id_persona) {
    $qB = "SELECT * from tabla1 where fecha between '" . $fIn . "' and '" . $fFn . "' and id_persona='" . $id_persona . "' order by fecha";
    $rB = $bd->query($qB);
    while ($fB = $rB->fetch_array()) {
        $a[] = $fB[2];
    }
    $b['persona' . $id_persona] = $a;
    $array[] = $b;
    unset($b);
    unset($a);
}
foreach ($array as $key => $value) {
    foreach ($value as $p => $value) {
        echo $p . ' : ';
        $i=count($array[$key][$p]);
        foreach ($array[$key][$p] as $value) {
            $i--;
            if($i==0) echo ' (ultimo) <b>'.$value.'</b>'; else echo $value . ',';
            $v[] = $value;
        }
        echo '<br>';
    }
    echo '-----------------------------<br>';
}
foreach (array_count_values($v) as $key => $value) {
    echo $key . ' -> ' . $value . ' veces<br>';
}

Espero sea así
Saludos Jefferson Jiménez
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta SQL

Publicado por Sebastian (11 intervenciones) el 13/01/2023 17:49:01
gracias, al final me ayudaron con esta consulta:

1
2
3
4
5
6
7
WITH ranked_contact AS (
  SELECT t1.*, ROW_NUMBER() OVER (PARTITION BY id_persona ORDER BY fecha DESC) AS rn
  FROM `tabla1` AS t1
)
 
SELECT contacto, count(*) as counter_contact from ranked_contact
where rn = 1 group by contacto;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar