MySQL - consulta maximo registro - 1

 
Vista:
sin imagen de perfil
Val: 12
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

consulta maximo registro - 1

Publicado por alberto (7 intervenciones) el 22/05/2019 17:12:03
cordial saludo,
tengo una tabla con los datos
id valor tipo
1 1212 CAJAMENOR
6 1157462 CAJAMENOR
7 673511 CAJAGENERAL
8 233333 CAJAMENOR

requiero tomar el id y el valor del maximo registro - 1 cuando el tipo sea CAJAMENOR O CAJAGENERAL.
por ejemplo tengo el id 8 valor 233333 si ejecuto la consulta de siguiente manera
1
2
3
4
5
SELECT
Max(a.idtesoarqueo)
FROM
tesoarqueo AS a
WHERE a.TipoRegistro = 'CAJAMENOR'
me entrega el resultado ya mencionado

ahora bien necesito que me muestre realmente el id 6 valor 1157462, para lo que ejecute esta consulta
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
m.TotGastos,
m.idtesoarqueo
FROM
tesoarqueo AS m
WHERE
m.idtesoarqueo = (
SELECT
Max(a.idtesoarqueo)-1
FROM
tesoarqueo AS a
WHERE a.TipoRegistro = 'CAJAMENOR'
)
pense que al agregar la condicion WHERE a.TipoRegistro = 'CAJAMENOR' en la subconsulta me entregaria el resultado, pero no, me muestra el resultado del id 7.

agradezco su colaboración para guiarme en la solución
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: 4
Ha aumentado su posición en 20 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

consulta maximo registro - 1

Publicado por Daniel (2 intervenciones) el 22/05/2019 17:27:13
Buenas Alberto..

En la subconsulta en la clausula where pueba colocando de esta manera
WHERE a.TipoRegistro = 'CAJAMENOR' OR a.TipoRegistro = 'CAJAGENERAL'

Saludos..
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
Val: 12
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

consulta maximo registro - 1

Publicado por alberto (7 intervenciones) el 22/05/2019 18:08:17
gracias daniel,

realice proceso según me sugieres y obtuve el mismo resultado me regresa los valores del id 7 no los del id 6
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
Val: 4
Ha aumentado su posición en 20 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

consulta maximo registro - 1

Publicado por Daniel (2 intervenciones) el 22/05/2019 19:34:48
Alberto estuve verificando y en la subconsulta traes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
Max(a.idtesoarqueo)-1 siendo el maximo id 8 al restarle 1, te trae los datos del id 7 por eso trae los datos que necesitas.
Prueba de esta manera:
SELECT
m.TotGastos,
m.idtesoarqueo
FROM
tesoarqueo AS m
WHERE
m.idtesoarqueo = (
SELECT
Max(a.idtesoarqueo)-2
FROM
tesoarqueo AS a
WHERE a.TipoRegistro = 'CAJAMENOR'
)
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
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

consulta maximo registro - 1

Publicado por Rafael (97 intervenciones) el 23/05/2019 09:25:24
Prueba esto y nos cuentas....

1
2
3
4
5
6
7
8
9
10
11
select TipoRegistro
     , idtesoarqueo
     , TotGastos
from   (select TipoRegistro
             , idtesoarqueo
             , TotGastos
             , @row_number:=CASE WHEN @tipochg = TipoRegistro THEN @row_number + 1 ELSE 1 END AS num
             , @tipochg:=TipoRegistro as tipopos
        from   tesoarqueo
        order  by TipoRegistro, idtesoarqueo desc) sq
where  num < 3

Al menos a mi me funciona... mira
http://sqlfiddle.com/#!9/86bce2/1


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Omar
Val: 4
Ha aumentado su posición en 14 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

consulta maximo registro - 1

Publicado por Omar (1 intervención) el 23/05/2019 22:50:02
Hola Alberto, si lo que necesitas es obtener el maximo de gastos y que se recupere en especifico CAJMENOR y CAJAGENERAL lo podrias resolver de la siguiente manera.

1
2
3
4
5
6
7
8
(select  idtesoarqueo,totGastos, tipoRegistro
        from   tesoarqueo
        where tipoRegistro='CAJAMENOR')
union
  (select  idtesoarqueo,totGastos, tipoRegistro
        from   tesoarqueo
        where tipoRegistro='CAJAGENERAL' )
        order by totGastos desc limit 2;


Importante, te sugiero usar tabla temporal para este tipo de cosas ya que UNION siempre puede darte dolor de cabeza con el tiempo de ejecución.

yo lo que haría sería :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*Creamos  la tabla temporal*/
create temporary table tablaTMP(  idtesoarqueo int, totGastos decimal(14,2) , tipoRegistro varchar(100));
 
 
/*Se inserta primero CAJAMENOR*/
insert into tablaTMP (idtesoarqueo,totGastos, tipoRegistro)
select  idtesoarqueo,totGastos, tipoRegistro
        from   tesoarqueo
        where tipoRegistro='CAJAMENOR'
  order by totGastos desc limit 1;
 
 
 
/*Se inserta CAJAGENERAL*/
insert into tablaTMP (idtesoarqueo,totGastos, tipoRegistro)
select  idtesoarqueo,totGastos, tipoRegistro
        from   tesoarqueo
        where tipoRegistro='CAJAGENERAL'
  order by totGastos desc limit 1;
 
/*Aqui obtienes la info*/
select *from tablaTMP;



Espero te sirva.
Omar Hernández
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 12
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

consulta maximo registro - 1

Publicado por alberto (7 intervenciones) el 25/05/2019 19:55:07
muchas gracias Omar.
ejecute según tus instrucciones y me funciono exacto lo que necesitaba.
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