** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Sentencia SQL por estado
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoSentencia SQL por estado

 Responder Responder Página  12>
Autor
Mensaje
shenares Ver desplegable
Habitual
Habitual


Unido: 01/Septiembre/2020
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Tema: Sentencia SQL por estado
    Enviado: 15/Marzo/2021 a las 09:50
Hola,

Espero poder explicarme para entender la sentencia que me gustaría tramitar. Tengo una BBDD en access que recoge Estados de un proyecto. Estos estados pueden repetirse en el tiempo y tener varias veces un mismo estado. Como ejemplo:

Model     Status     Status_date
APOS A8     Welcome Pack     06/02/2020
APOS A8     Welcome Pack     02/04/2020
APOS A8     NDA/Quotation     24/04/2020
APOS A8     NDA/Quotation     27/04/2020
APOS A8     NDA/Quotation     05/05/2020
APOS A8     NDA/Quotation     11/05/2020
APOS A8     NDA/Quotation     12/05/2020
APOS A8     SRF received     21/05/2020
APOS A8     SRF received     29/05/2020
APOS A8     SRF received     01/06/2020
APOS A8     SRF received     02/06/2020
APOS A8     SRF received     08/06/2020
APOS A8     NDA/Quotation     09/06/2020
APOS A8     Offer sent     11/06/2020
APOS A8     Offer sent     16/06/2020
APOS A8     Offer sent     06/07/2020
APOS A8     NDA/Quotation     03/09/2020
APOS A8     NDA/Quotation     07/09/2020
APOS A8     NDA/Quotation     08/09/2020
APOS A8     NDA/Quotation     10/09/2020
APOS A8     Offer received     23/09/2020
APOS A8     Samples received     28/09/2020
APOS A8     Samples received     06/10/2020
APOS A8     Testing     02/11/2020
APOS A8     Testing     19/11/2020
APOS A8     Testing     23/11/2020
APOS A8     Testing     03/12/2020
APOS A8     Testing     09/12/2020
APOS A8     Testing     07/01/2021
APOS A8     Testing     12/01/2021
APOS A8     Testing     01/02/2021
APOS A8     EoT DEKRA     12/02/2021
APOS A8     EoT DEKRA     06/03/2021
APOS A8     Testing     07/03/2021
APOS A8     Testing     08/03/2021
APOS A8     EoT DEKRA     09/03/2021
APOS A8     EoT DEKRA     10/03/2021
APOS A8     Testing     11/03/2021
APOS A8     EoT DEKRA     12/03/2021


La idea es que la sentencia me muestre algo así:

Model     Status     Status_date
APOS A8 Testing     02/11/2020 -> El primer valor de testing
APOS A8     EoT DEKRA     12/02/2021 -> El primer valor de EoT DEKRA
APOS A8     Testing     07/03/2021 -> El primer valor de testing
APOS A8     EoT DEKRA     09/03/2021 -> El primer valor de EoT DEKRA
APOS A8     Testing     11/03/2021 -> El primer valor de testing
APOS A8     EoT DEKRA     12/03/2021 -> El primer valor de EoT DEKRA



¿Es posible tener una consulta para establecer este criterio?

Gracias de antemano.
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6521
Enlace directo a este mensaje Enviado: 15/Marzo/2021 a las 13:46
Hola!

No veo ningún criterio que valga para hacer lo que necesitas.
Tiene que haber otro campo que discrimine entre los grupos y no sólo el orden.
Un Saludo.
Arriba
shenares Ver desplegable
Habitual
Habitual


Unido: 01/Septiembre/2020
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 15/Marzo/2021 a las 16:14
Hola,

Gracias por la respuesta.

Hay un Id para cada uno de los valores, ¿crees que esto es suficiente? Estos son los campos de esta tabla:

Id, Project_Id, Model, Status, Status_reason, Source, Status_date

De estos valores, los que me interesan son el Model, Status y Status_date
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6521
Enlace directo a este mensaje Enviado: 15/Marzo/2021 a las 17:59
Hola!

Tiene que ser un campo que tenga un valor común a cada grupo.
Un Saludo.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Enlace directo a este mensaje Enviado: 16/Marzo/2021 a las 08:38
Lo que pides es muy similar a los subtotales de Excel: "por cada cambio en xxx haz aquello"

Pero me temo que no existe nada directo en Access que devuelva eso. Yo creo que deberás crear un código que recorra los registros y vaya comparando. Cada vez que encuentras una diferencia entre ese registro y el anterior salvas los resultados en una tabla temporal.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
Juanmasp Ver desplegable
Habitual
Habitual


Unido: 21/Abril/2006
Estado: Sin conexión
Puntos: 122
Enlace directo a este mensaje Enviado: 16/Marzo/2021 a las 15:23
Lo puedes hacer en un informe, Ordenando por Status_date y Agrupando después por Model y Status 
Muestras el encabezado de grupo y ocultas el detalle, así solo saldrá el primero de cada subgrupo

Si el model no cambia, como en el ejemplo que as puesto, entonces agrupa solo por Status

Esta es una forma de hacerlo sin nada de código, digamos "Automático"
Arriba
shenares Ver desplegable
Habitual
Habitual


Unido: 01/Septiembre/2020
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 22/Marzo/2021 a las 23:56
Hola a todos,

He cambiado la forma de la tabla añadiendo un valor en común:

Model     Status     Status_date           ExecutionProject_Id
APOS A8     Welcome Pack     06/02/2020    1
APOS A8     Welcome Pack     02/04/2020    1
APOS A8     NDA/Quotation     24/04/2020   1
APOS A8     NDA/Quotation     27/04/2020   1
APOS A8     NDA/Quotation     05/05/2020   1
APOS A8     NDA/Quotation     11/05/2020   1
APOS A8     NDA/Quotation     12/05/2020   1
APOS A8     SRF received     21/05/2020    1
APOS A8     SRF received     29/05/2020    1
APOS A8     SRF received     01/06/2020    1
APOS A8     SRF received     02/06/2020    1
APOS A8     SRF received     08/06/2020    1
APOS A8     NDA/Quotation     09/06/2020   1
APOS A8     Offer sent     11/06/2020      1
APOS A8     Offer sent     16/06/2020      1
APOS A8     Offer sent     06/07/2020      1
APOS A8     NDA/Quotation     03/09/2020   1
APOS A8     NDA/Quotation     07/09/2020   1
APOS A8     NDA/Quotation     08/09/2020   1
APOS A8     NDA/Quotation     10/09/2020   1
APOS A8     Offer received     23/09/2020 1
APOS A8     Samples received     28/09/2020 1
APOS A8     Samples received     06/10/2020 1
APOS A8     Testing     02/11/2020          1
APOS A8     Testing     19/11/2020          1
APOS A8     Testing     23/11/2020          1
APOS A8     Testing     03/12/2020          1
APOS A8     Testing     09/12/2020          1
APOS A8     Testing     07/01/2021          1
APOS A8     Testing     12/01/2021          1
APOS A8     Testing     01/02/2021          1
APOS A8     EoT DEKRA     12/02/2021        1
APOS A8     EoT DEKRA     06/03/2021        1
APOS A8     Testing     07/03/2021          2
APOS A8     Testing     08/03/2021          2
APOS A8     EoT DEKRA     09/03/2021        2
APOS A8     EoT DEKRA     10/03/2021        2
APOS A8     Testing     11/03/2021          3
APOS A8     EoT DEKRA     12/03/2021        3

El resultado que busco es este:

Model     Status     Status_date ExecutionProjects_Id
APOS A8 Testing     02/11/2020    1             -> El primer valor (Id) de testing
APOS A8     EoT DEKRA     12/02/2021 1           -> El primer valor (Id) de EoT DEKRA
APOS A8     Testing     07/03/2021    2        -> El primer valor (Id) de testing
APOS A8     EoT DEKRA     09/03/2021   2        -> El primer valor (Id) de EoT DEKRA
APOS A8     Testing     11/03/2021      3       -> El primer valor (Id) de testing
APOS A8     EoT DEKRA     12/03/2021    3       -> El primer valor (Id) de EoT DEKRA

Querría que se mostrara el primer valor (Id) de Testing y primer valor (Id) de EoT DEKRA, asemejado a ese ExecutionProjects_Id.

Un slaudo,
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: en línea
Puntos: 14428
Enlace directo a este mensaje Enviado: 25/Marzo/2021 a las 12:45
Una SQL de totales, agrupando por los campos que quieres, quedándote con el valor mínimo de Id, te da el resultado que buscas.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
shenares Ver desplegable
Habitual
Habitual


Unido: 01/Septiembre/2020
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 25/Marzo/2021 a las 12:51
Hola,

He hecho algo así, pero no me da los minimos:

SELECT Min(Id), Model, Status, Status_date, ExecutionProject_id
FROM Projects_status
WHERE (Status = 'Testing' Or Status = 'Global Final Report') AND YEAR(Status_date) = Year(DATE())
GROUP BY Model, Status, Status_date, ExecutionProject_id;

¿Que estoy haciendo mal?
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: en línea
Puntos: 14428
Enlace directo a este mensaje Enviado: 25/Marzo/2021 a las 13:41
Eso te dará el mínimo por cada agrupación: modelo-status-date-idProject

Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
shenares Ver desplegable
Habitual
Habitual


Unido: 01/Septiembre/2020
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 25/Marzo/2021 a las 14:09
Hola,

Si, quiero que me dé el mínimo por cada agrupación, pero me aparece lo siguiente:

Expr1000     Model     Status     Status_date     ExecutionProject_id
330     APOS A8     Global Final Report     16/03/2021     301
94     APOS A8     Testing     07/01/2021     301
95     APOS A8     Testing     12/01/2021     301
96     APOS A8     Testing     01/02/2021     301
287     C1121X-8PLTEP     Testing     03/03/2021     85
288     C1121X-8PLTEP     Testing     05/03/2021     85
303     C1121X-8PLTEP     Testing     09/03/2021     85
342     CB3 Basic EU     Testing     17/03/2021     245
361     CB3 Basic EU     Testing     18/03/2021     245
363     CB3 Basic EU     Testing     19/03/2021     245
196     L610-EU     Global Final Report     02/03/2021     299
59     L610-EU     Testing     27/01/2021     299
60     L610-EU     Testing     01/02/2021     299
61     L610-EU     Testing     02/02/2021     299
62     L610-EU     Testing     03/02/2021     299
311     MY19 TCP GA     Global Final Report     12/03/2021     0
213     MY19 TCP GA     Testing     12/03/2021     0
260     MY21 TCP GA/GB     Global Final Report     04/03/2021     0
211     MY21 TCP GA/GB     Testing     04/03/2021     0
335     MY23 TCP GB     Global Final Report     17/03/2021     0
331     MY23 TCP GB     Testing     17/03/2021     0

La idea es que me dé el minimo de esos dos estados por agrupación.

Editado por shenares - 25/Marzo/2021 a las 14:12
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: en línea
Puntos: 14428
Enlace directo a este mensaje Enviado: 25/Marzo/2021 a las 15:39
¿Y la consulta que has hecho es?


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
shenares Ver desplegable
Habitual
Habitual


Unido: 01/Septiembre/2020
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 25/Marzo/2021 a las 15:44
Hola,

La consulta es la que he indicado anteriormente:

SELECT Min(Id), Model, Status, Status_date, ExecutionProject_id
FROM Projects_status
WHERE (Status = 'Testing' Or Status = 'Global Final Report') AND YEAR(Status_date) = Year(DATE())
GROUP BY Model, Status, Status_date, ExecutionProject_id;

Un saludo,
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: en línea
Puntos: 14428
Enlace directo a este mensaje Enviado: 25/Marzo/2021 a las 16:07
Vamos a ver, está haciendo lo que le pides en la consulta ... 

Saca los 'Testing' o 'Global...' agrupados por esos cuatro campos ... 

Si quieres que agrupe por menos tendrás que quitarlos de la cláusula WHERE ... o eso o no te estoy entendiendo en lo más mínimo ... Ouch
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
shenares Ver desplegable
Habitual
Habitual


Unido: 01/Septiembre/2020
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 25/Marzo/2021 a las 16:16
Hola,

Puede que no me haya explicado bien.

Tengo una tabla con esos campos, Model     Status     Status_date     ExecutionProject_id, Id. Lo que quiero es una consulta que me agrupe los campos, donde Status sea 'Testing' o 'Global..', pero solo el minimo ID por cada agrupación. Sería algo así:

APOS A8 Testing     02/11/2020    1             -> El minimo valor (Id) de testing
APOS A8     EoT DEKRA     12/02/2021 1           -> El minimo valor (Id) de EoT DEKRA
APOS A8     Testing     07/03/2021    2        -> El minimo valor (Id) de testing
APOS A8     EoT DEKRA     09/03/2021   2        -> El minimo valor (Id) de EoT DEKRA
APOS A8     Testing     11/03/2021      3       -> El minimo valor (Id) de testing
APOS A8     EoT DEKRA     12/03/2021    3       -> El minimo valor (Id) de EoT DEKRA

La tabla de la que cojo los datos tiene esta pinta:

Model     Status     Status_date           ExecutionProject_Id
APOS A8     Welcome Pack     06/02/2020    1
APOS A8     Welcome Pack     02/04/2020    1
APOS A8     NDA/Quotation     24/04/2020   1
APOS A8     NDA/Quotation     27/04/2020   1
APOS A8     NDA/Quotation     05/05/2020   1
APOS A8     NDA/Quotation     11/05/2020   1
APOS A8     NDA/Quotation     12/05/2020   1
APOS A8     SRF received     21/05/2020    1
APOS A8     SRF received     29/05/2020    1
APOS A8     SRF received     01/06/2020    1
APOS A8     SRF received     02/06/2020    1
APOS A8     SRF received     08/06/2020    1
APOS A8     NDA/Quotation     09/06/2020   1
APOS A8     Offer sent     11/06/2020      1
APOS A8     Offer sent     16/06/2020      1
APOS A8     Offer sent     06/07/2020      1
APOS A8     NDA/Quotation     03/09/2020   1
APOS A8     NDA/Quotation     07/09/2020   1
APOS A8     NDA/Quotation     08/09/2020   1
APOS A8     NDA/Quotation     10/09/2020   1
APOS A8     Offer received     23/09/2020 1
APOS A8     Samples received     28/09/2020 1
APOS A8     Samples received     06/10/2020 1
APOS A8     Testing     02/11/2020          1
APOS A8     Testing     19/11/2020          1
APOS A8     Testing     23/11/2020          1
APOS A8     Testing     03/12/2020          1
APOS A8     Testing     09/12/2020          1
APOS A8     Testing     07/01/2021          1
APOS A8     Testing     12/01/2021          1
APOS A8     Testing     01/02/2021          1
APOS A8     EoT DEKRA     12/02/2021        1
APOS A8     EoT DEKRA     06/03/2021        1
APOS A8     Testing     07/03/2021          2
APOS A8     Testing     08/03/2021          2
APOS A8     EoT DEKRA     09/03/2021        2
APOS A8     EoT DEKRA     10/03/2021        2
APOS A8     Testing     11/03/2021          3
APOS A8     EoT DEKRA     12/03/2021        3

En la cuál hay varias filas por cada Execution_id.

Gracias
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable