MySQL - No se como realizar la siguiente select

   
Vista:

No se como realizar la siguiente select

Publicado por mendizalea (10 intervenciones) el 11/04/2017 22:48:38
Buenas noches,

Tengo 2 tablas, uno con usuarios y otro con sus horarios de entrada y salida y el calculo de segundos que ha estado que lo realizo mediante PHP. Necesito por una parte calcular el día que mas tiempo a estado el usuario, pero solo puede tener registros de 2 días, si tiene de mas o menos no tiene que mostrar y a su vez mostrar el tiempo que a estado.

No se como tendria que hacerlo, he realizado varias pruebas pero no consigo.

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

No se como realizar la siguiente select

Publicado por leonardo_josue (301 intervenciones) el 11/04/2017 23:06:29
Hola mendizalea:

No me queda claro qué es lo que quieres obtener o donde está el problema. Es conveniente que nos digas cómo es la estructura de tus tablas y también que nos pongas algunos cuantos datos de ejemplo en donde se cumplan las distintas condiciones que mencionas. A partir de esos datos dinos qué es lo que esperas obtener como resultado, de esta manera será más factible que podamos ayudarte.

Postea también lo que intentaste hacer, no importa que no funcione, si tus consultas marcan error, dinos cuál es ese error. Si las consultas no regresan lo que esperas, entonces dinos qué es lo que están regresando y qué es lo que deberían regresar.

Saludos
Leo.
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

No se como realizar la siguiente select

Publicado por mendizalea (10 intervenciones) el 12/04/2017 00:16:40
Tengo la siguiente consulta:

SELECT T14Tiempos.IDParticipanteT14, T14Tiempos.IDCarreraT14, Max(SegundosT14+PenalizaT14) AS Total, Count(*) AS contar
FROM T14Tiempos
GROUP BY T14Tiempos.IDParticipanteT14, T14Tiempos.IDCarreraT14
HAVING (((T14Tiempos.IDCarreraT14)=22) AND ((Count(*))=2));

Con esto lo que consigo es calcular el máximo de tiempo invertido por los participantes que han tomado salida en 2 jornadas. Hasta aquí todo correcto, funciona correctamente, pero lo que no consigo realizar el mostrar el tiempo de la penalización, porque si hago lo siguiente:

SELECT T14Tiempos.IDParticipanteT14, T14Tiempos.IDCarreraT14, Max(SegundosT14+PenalizaT14) AS Total, Count(*) AS contar, T14Tiempos.PenalizaT14
FROM T14Tiempos
GROUP BY T14Tiempos.IDParticipanteT14, T14Tiempos.IDCarreraT14, T14Tiempos.PenalizaT14
HAVING (((T14Tiempos.IDCarreraT14)=22));

Me deja de funcionar lo anterior porque al agrupar también mediante el campo de penalización y si dicho usuario tiene penalización distinta en alguno de los dos 2 días me muestra 2 registros, solo funciona cuando la penalizacion de los dos días es el mismo. Como puede mantener el resultado de la primera consulta pero también mostrando la penalización que seria la que pertenece a la suma realizo?

Espero haberme explicado mejor.

Muchas gracias por tu respuesta compañero.
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

No se como realizar la siguiente select

Publicado por leonardo_josue (301 intervenciones) el 12/04/2017 18:06:46
Hola de nuevo mendizalea:

Vuelvo a insistir en que es complicado entender tu problema si no tenemos todos los elementos... para ti puede resultar claro lo que estás tratando de explicar, pero te aseguro que pocos de nosotros sabemos de qué estás hablando. Nosotros no sabemos cómo es tu modelo, no sabemos de que hablas con tiempos de penalización, tomar salida en dos jornadas y demás cosas que mencionas en tu post O_o

Tal como lo comenté en un inicio, debes ser lo más claro posible, siguiendo algunos cuantos consejos:

1. Postea cómo es la estructura de tus tablas, es decir, qué campos tiene, de qué tipos de datos son estos campos y si hay más de una tabla cómo están relacionados estos campos:

2. Pon algunos cuantos datos de ejemplo en donde se cumplan las distintas condiciones que mencionas. No es necesario que nos incluyas toda la tabla, y ni siquiera tienen que ser datos reales, simplemente es un set de datos con los que nosotros también podamos hacer nuestras propias pruebas.

3. Si posteas consultas (como es tu caso), usando los datos que nos pongas de ejemplo dinos qué es lo que se está obteniendo y dinos qué es lo que esperas obtener como resultado final, así nosotros podremos buscar una alternativa que se acerque a lo que tú quieres como resultado.

Saludos
Leo
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

No se como realizar la siguiente select

Publicado por Mendizalea (10 intervenciones) el 12/04/2017 22:44:19
Lo siento, entiendo que tal y como lo estoy planteando es dificil entenderlo, voy a seguir tus pautas para intentar explicarlo mejor.

Adjunto un documento zip con un pdf explicando un poco todo y el SQL de ejemplo.

He puesto es resultado que me gustaria tener. En principio lo que quiero sacar es lo mismo que en la consulta 1, pero incluyendo la penalizacion del registro que muestra en la consulta 1.

Muchas gracias por todo comprañero.
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

No se como realizar la siguiente select

Publicado por Andrés andres.mella.romero@gmail.com (1 intervención) el 13/04/2017 02:09:45
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SELECT
    T02Participantes.DorsalT02,
    T.IDParticipanteT14,
    T14Tiempos.IDCarreraT14,
    T14Tiempos.SegundosT14 + T14Tiempos.PenalizaT14 AS TOTAL,
    T.CNT AS counterp,
    T14Tiempos.PenalizaT14
FROM
    T02Participantes
        INNER JOIN
    T14Tiempos ON T02Participantes.IDParticipanteT02 = T14Tiempos.IDParticipanteT14
        INNER JOIN
    (SELECT
        IDParticipanteT14,
            COUNT(IDTiempoT14) AS CNT,
            MAX(SegundosT14 + PenalizaT14) AS M
    FROM
        T14Tiempos
    GROUP BY IDParticipanteT14
    ) AS T ON T.IDParticipanteT14 = T14Tiempos.IDParticipanteT14
        AND (T14Tiempos.SegundosT14 + T14Tiempos.PenalizaT14) = T.M
WHERE
    T14Tiempos.IDCarreraT14 = 1
        AND T14Tiempos.IDParticipanteT14 IN (1 , 2);
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