SQL - extraer dato

   
Vista:

extraer dato

Publicado por Raul (2 intervenciones) el 31/01/2012 12:44:32
Hola amigos, de la consulta que abajo os indico quiero que me saque el valor de "bateria" que en ese momento me queda, el problema que si lo pongo tal y como esta me saca siempre que el valor es del 100%, si le pongo MIN siempre me da el 0, pero lo que necesito es que en el momento de la consulta me de la real, es decir el dia de hoy, no de hace cuatro dias.
Si la consulta la hago del dia de hoy solo, y le pongo MIN(val_dat) as bateria me lo saca correcto el nivel, el problema es que la consulta es desde hace ......

select idn_dat,max(clv_dat) as calca, max(fec_dat) as fecha, max(val_dat) as bateria
from gpsdat
WHERE idn_dat BETWEEN '500000' AND '500259'
group by idn_dat
order by idn_dat

Un saludo.
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

extraer dato

Publicado por leonardo_josue (877 intervenciones) el 31/01/2012 16:34:23
Hola Raúl:

no me queda claro el problema, creo que sería conveniente que nos pongas algunos datos de ejemplo de tu tabla y a partir de esos datos qué es lo que esperas de salida, Menciona también de qué tipo de datos es cada columna de tu tabla, pues creo que manejas valores numéricos y de fecha, pero eso sólo tú lo sabes.

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

extraer dato

Publicado por Raul (2 intervenciones) el 01/02/2012 09:55:33
idn_dat - autonumerico
max(clv_dat) as calca -- varchar(20)
max(fec_dat) as fecha -- datetime year
max(val_dat) as bateria -- varchar(20)

select idn_dat,max(clv_dat) as calca, max(fec_dat) as fecha, max(val_dat) as bateria
from gpsdat
WHERE idn_dat BETWEEN '500000' AND '500259'
group by idn_dat
order by idn_dat

Me extrae por el numero de idn_dat desde el primer dia que se activo ( puede ser hace un año) y ordenado por este numero, y a la vez el tanto por ciento de bateria que le queda al terminal, pero saca el ultimo dato maximo o minimo, segun le ponga en la consulta, que tiene en la tabla desde dia que emitio y lo que necesito es que me saque, todo igual salvo que el estado de la bateria me de la de ese momento de la consulta.
Las pruebas que he hecho es que si le pongo "and fec_dat >= ${dia, date}" detras de WHERE idn_dat BETWEEN '500000' AND '500259' me lo saca correcto pero no todos los datos desde el dia que empezo a emitir, sino ese momento de la consulta.
Espero no ser pesado y haber aclarado algo.
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

extraer dato

Publicado por leonardo_josue (877 intervenciones) el 01/02/2012 17:25:02
Hola de nuevo:

Olvidaste poner datos de ejemplo, y sin estos es casi imposible tratar de ayudarte, sin embargo hay algunas observaciones que hacer. Las funciones MIN y MAX al igual que la función BETWEEN tienen comportamientos diferentes cuando se aplican sobre campos tipo numérico y tipo cadeba. Observa este pequeño ejemplo en MySQL para ver si queda claro:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
mysql> CREATE TABLE tabla (campo_varchar VARCHAR(20), campo_int INT);
Query OK, 0 rows affected (0.11 sec)
 
mysql> INSERT INTO tabla VALUES ('11', 11),('111', 111),
    -> ('2', 2), ('-1', -1), ('-2', -2), ('0', 0);
Query OK, 6 rows affected (0.09 sec)
Records: 6  Duplicates: 0  Warnings: 0
 
mysql> SELECT * FROM tabla;
+---------------+-----------+
| campo_varchar | campo_int |
+---------------+-----------+
| 11            |        11 |
| 111           |       111 |
| 2             |         2 |
| -1            |        -1 |
| -2            |        -2 |
| 0             |         0 |
+---------------+-----------+
6 rows in set (0.00 sec)
 
mysql> SELECT MAX(campo_varchar), MAX(campo_int) FROM tabla;
+--------------------+----------------+
| MAX(campo_varchar) | MAX(campo_int) |
+--------------------+----------------+
| 2                  |            111 |
+--------------------+----------------+
1 row in set (0.00 sec)
 
mysql> SELECT MIN(campo_varchar), MIN(campo_int) FROM tabla;
+--------------------+----------------+
| MIN(campo_varchar) | MIN(campo_int) |
+--------------------+----------------+
| -1                 |             -2 |
+--------------------+----------------+
1 row in set (0.00 sec)
 
mysql> SELECT * FROM tabla WHERE campo_varchar BETWEEN '0' AND '2';
+---------------+-----------+
| campo_varchar | campo_int |
+---------------+-----------+
| 11            |        11 |
| 111           |       111 |
| 2             |         2 |
| 0             |         0 |
+---------------+-----------+
4 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla WHERE campo_int BETWEEN 0 AND 2;
+---------------+-----------+
| campo_varchar | campo_int |
+---------------+-----------+
| 2             |         2 |
| 0             |         0 |
+---------------+-----------+
2 rows in set (0.00 sec)


Observa que la tabla tiene dos columnas, una de tipo varchar y otra de tipo int. Aunque los datos en ambas columnas aparente son iguales, el resultado de las funciones min y max son distintos y lo mismo pasa con la función BETWEEN que se comporta distinto cuando manejas cadenas o números. En tu definición de la tabla dices que los campos CLV_DAT Y VAL_DAT son de tipo VARCHAR por lo que es posible que tengas que hacer una conversión a número para obtener los resultados esperados.

Haz la prueba y si continuas con problemas te pido nuevamente que nos pongas algunos datos de ejemplo de tu tabla.

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