• Martes 12 de Noviembre de 2024, 21:08

Autor Tema:  sentencia algo complicada  (Leído 2580 veces)

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
sentencia algo complicada
« en: Lunes 17 de Mayo de 2010, 21:38 »
0
Buenas:

perdonad la molestia pero me estoy volviendo un poco loco para hacer una sentencia.

Tengo una tabla con los campos id,time,mac,status.

en ella se meten datos continuamente sobre el estado de unos sensores.

entonces quiero listar el ultimo status para cada mac diferente.

como puedo hacerlo?

gracias!

fonsi3

  • Miembro activo
  • **
  • Mensajes: 95
    • Ver Perfil
Re: sentencia algo complicada
« Respuesta #1 en: Martes 18 de Mayo de 2010, 00:35 »
0
Pues a mi se me ocurre algo como esto:
Código: SQL
  1. SELECT estatus FROM nombreTabla WHERE mac = 'dir mac a buscar' ORDER BY TIME DESC LIMIT 1
  2.  
Cha che chi cho chu buenichimo!
http://mensoscripts.com

Links de interes: HTML | CCS2~CSS* | PHP
Indispensables tools]Firebug[/url] | Web Developer | FireFTP | Live Headers

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: sentencia algo complicada
« Respuesta #2 en: Martes 18 de Mayo de 2010, 14:24 »
0
gracias por la respuesta, pero esa no es lo que busco exactamente.

En esa consulta hay que especificar la mac, y quiero ver todas las macs, quiero algo como.

mac     status           time

001      RECOGIDO          18-05-10
002      En MOVIMIENTO  16-05-10
003      EN MOVIMIENTO  17-05-10

osea, el listado de cada mac con su ultimo estado. Usando el GROUP BY no me sale la ultima (la que mas fecha tenga).

gracias!

fonsi3

  • Miembro activo
  • **
  • Mensajes: 95
    • Ver Perfil
Re: sentencia algo complicada
« Respuesta #3 en: Martes 18 de Mayo de 2010, 23:02 »
0
Lo que tu pides es complicado de entender sin una buena base de sql, sería algo así:
Primero tienes que hacer una query que te agrupe todas las macs que sean iguales, más la fecha máxima por cada una, osea, hay que usar GROUP BY, esta será la subquery que producirá la tabla derivada, y luego con esta "inline view" la comparas con la tabla "macTable" y como ya sabes que tal mac tiene tal tiempo más reciente, ya podrás obtener su status último mediante un INNER JOIN. Así sería la consulta:

Código: SQL
  1. SELECT
  2.             finalTable.macDir
  3.         ,   finalTable.macTime
  4.         ,   finalTable.macStatus   
  5. FROM
  6.     ( SELECT
  7.             macDir
  8.         ,   MAX( macTime ) AS maxTime
  9.     FROM
  10.         macTable
  11.     GROUP BY
  12.         macDir
  13.     ) AS lastestValues
  14.         INNER JOIN macTable AS finalTable
  15.             ON  lastestValues.macDir = finalTable.macDir
  16.             AND lastestValues.maxTime = finalTable.macTime
  17.  

En mi opinión, si el desarrollo que estás haciendo importan datos pasados, presente y futuros en variadas situaciones, entonces encara tu aplicación utilizando una base de datos temporal, o alguna híbrida que soporte manejo de datos temporales.
Cha che chi cho chu buenichimo!
http://mensoscripts.com

Links de interes: HTML | CCS2~CSS* | PHP
Indispensables tools]Firebug[/url] | Web Developer | FireFTP | Live Headers

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: sentencia algo complicada
« Respuesta #4 en: Miércoles 19 de Mayo de 2010, 15:57 »
0
si, es exactamente eso lo que queria!
muchas gracias!!!

y si, tambien habia pensado en una tabla en la que se guardara el ultimo estado con UPDATE y en la otra hacer un trigger para la inserción historica, pero con esta sentencia me da la lista igual y es eficaz (tiempo 0.05 ).

gracias!