!!! Sorpresa !!! LAST no es un comando SQL

05/12/2004 - 05:10 por Mc_Clan | Informe spam
Hola a Todos,

Estudio una soluccion para obtener una lista con PHP desde un DataBase
MSSQL, parece facil ScansID, IP, OS ... donde el campo IP se
repite, como hacer para obtener los ultimos IP in relaccion al campo de
ScansID ?? mientras yo seguia obteniendo dobles de IP mi colega haciendo
una Query con Microsoft Acces lo logra sin dobles. Cojo la query "de
acces" que nos dà un resultado tan bonito y que es la siguiente:-

SELECT MAX(Scan.ScansID) as MAXSCANSID, Scan.IP, LAST(Scan.OS) as LASTOS
FROM Scan
GROUP BY Scan.IP
HAVING (((LAST(SCAN.OS)) IS NULL))
ORDER BY Scan.IP

!!! Sorpresa !!! LAST no es un comando SQL (Comprobado tambien en Shell)

No sè que cxxxxx hace el acces con esta sintax pero la hace funcionar..

Alguna idea???? (mismo sugerencia de como formular esta query desde PHP)

Muchas Gracias a Todos

McClan
NOTA

HE intentado tambien
SELECT DISTINCT IP // pero como le meto otro campo al lado se pasa el
DISTINCT para el forro.

Preguntas similare

Leer las respuestas

#1 Maxi
05/12/2004 - 07:16 | Informe spam
Hola, podrias usar la funcion MAX ya que SqlServer no numera bajo ningun
concepto los registros. Otra solucion es que definas un orden y armes un
aquery para numerar de menor a mayor por ej.

Fijate si con el MAX te es util, de lo contrario me avisas y te paso un ej
de como hacerlo de otra forma.

Abrazos


"Mc_Clan" escribió en el mensaje
news:41b28a4d$0$8115$
Hola a Todos,

Estudio una soluccion para obtener una lista con PHP desde un DataBase
MSSQL, parece facil ScansID, IP, OS ... donde el campo IP se repite,
como hacer para obtener los ultimos IP in relaccion al campo de ScansID ??
mientras yo seguia obteniendo dobles de IP mi colega haciendo una Query
con Microsoft Acces lo logra sin dobles. Cojo la query "de acces" que nos
dà un resultado tan bonito y que es la siguiente:-

> SELECT MAX(Scan.ScansID) as MAXSCANSID, Scan.IP, LAST(Scan.OS) as LASTOS
FROM Scan
GROUP BY Scan.IP
HAVING (((LAST(SCAN.OS)) IS NULL))
ORDER BY Scan.IP
>
!!! Sorpresa !!! LAST no es un comando SQL (Comprobado tambien en Shell)

No sè que cxxxxx hace el acces con esta sintax pero la hace
funcionar..

Alguna idea???? (mismo sugerencia de como formular esta query desde PHP)

Muchas Gracias a Todos

McClan
NOTA

HE intentado tambien
SELECT DISTINCT IP // pero como le meto otro campo al lado se pasa el
DISTINCT para el forro.
Respuesta Responder a este mensaje
#2 Mc_Clan
05/12/2004 - 16:10 | Informe spam
Ante de todo Muchissimas gracias por tu Ayuda,
La verdad es que me estoy volviendo loco.

Acabo de aprender porquè el LAST no funciona, por pura curiosidad lo
digo, aunque estoy seguro que ya lo sabes. LAST y FIRST Hacen parte del
dialecto JET-SQL y no de Transact-SQL, ademas no se aconseja el uso de
estos etc. etc. bueno, resultado, que el Access lo usa sin que se le
pida nada y desde PHP no logro hacer la query con el mismo resultado.

El Max no me funciona, te explico un poco aunque es realmente muy basico
por lo que probablemente por mi torpeza o desconocimiento me voy a
dormir hasta el año nuevo para la verguenza ;-)


Detalle:

Si hago:
SELECT DISTINCT IP FROM SCAN
// el resultado es 2608 = Correcto gracias a SELECT

Como intento añadir otros campos, vaya fiesta, ej.;
SELECT DISTINCT IP, OS FROM SCAN
// el resultado es 3400 = donde el campo IP se repite X veces :-(

//Ni hablar de meter condiciones a la query ej.;
SELECT DISTINCT IP FROM SCAN WHERE OS IS NULL
// BOOM 2457 = el resultado real es 334 :-(

Resumiendo, la estructura del DB es:
ScansID, IP, OS etc. etc.

Resultado buscado

1. Contar quantas maquinas han pasado por un scan (IP no repetidas)
//Con el DISTINCT todo OK, meno que no puedo listar nada, porquè
//como añado campos me cambia el resultado con los doblones "de oro"
;-)

2. Obtener el listado de las maquinas que han pasado por un scan
3. Obtener el listado con los campos OS Like '%WIN%'
4. Obtener el listado con los campos OS NOT Like '%WIN%'
5. Obtener el listado con los campos OS NULL


Otra vez Gracias por tu tiempo.

==McClan



Maxi a écrit :
Hola, podrias usar la funcion MAX ya que SqlServer no numera bajo ningun
concepto los registros. Otra solucion es que definas un orden y armes un
aquery para numerar de menor a mayor por ej.

Fijate si con el MAX te es util, de lo contrario me avisas y te paso un ej
de como hacerlo de otra forma.

Abrazos


"Mc_Clan" escribió en el mensaje
news:41b28a4d$0$8115$

Hola a Todos,

Estudio una soluccion para obtener una lista con PHP desde un DataBase
MSSQL, parece facil ScansID, IP, OS ... donde el campo IP se repite,
como hacer para obtener los ultimos IP in relaccion al campo de ScansID ??
mientras yo seguia obteniendo dobles de IP mi colega haciendo una Query
con Microsoft Acces lo logra sin dobles. Cojo la query "de acces" que nos
dà un resultado tan bonito y que es la siguiente:-

SELECT MAX(Scan.ScansID) as MAXSCANSID, Scan.IP, LAST(Scan.OS) as LASTOS




FROM Scan
GROUP BY Scan.IP
HAVING (((LAST(SCAN.OS)) IS NULL))
ORDER BY Scan.IP





!!! Sorpresa !!! LAST no es un comando SQL (Comprobado tambien en Shell)

No sè que cxxxxx hace el acces con esta sintax pero la hace
funcionar..

Alguna idea???? (mismo sugerencia de como formular esta query desde PHP)

Muchas Gracias a Todos

McClan
NOTA

HE intentado tambien
SELECT DISTINCT IP // pero como le meto otro campo al lado se pasa el
DISTINCT para el forro.





Respuesta Responder a este mensaje
#3 Maxi
05/12/2004 - 17:08 | Informe spam
Hola, si el max no te es util has pensado en el TOP 1? el tema es qwue debes
definirme cual es el primer registro? con que criterio lo haces?

por ej: el que tiene la menor fecha?

Este concepto del last es un concepto de cursores y sqlserver como muchos
otros motores de BDD no estan diseñados ni optimizados para trabajar asi,
sino que trabajan con conjuntos de datos :)


"Mc_Clan" escribió en el mensaje
news:41b324ca$0$8117$
Ante de todo Muchissimas gracias por tu Ayuda,
La verdad es que me estoy volviendo loco.

Acabo de aprender porquè el LAST no funciona, por pura curiosidad lo digo,
aunque estoy seguro que ya lo sabes. LAST y FIRST Hacen parte del dialecto
JET-SQL y no de Transact-SQL, ademas no se aconseja el uso de estos etc.
etc. bueno, resultado, que el Access lo usa sin que se le pida nada y
desde PHP no logro hacer la query con el mismo resultado.

El Max no me funciona, te explico un poco aunque es realmente muy basico
por lo que probablemente por mi torpeza o desconocimiento me voy a dormir
hasta el año nuevo para la verguenza ;-)


Detalle:

Si hago:
SELECT DISTINCT IP FROM SCAN
// el resultado es 2608 = Correcto gracias a SELECT

Como intento añadir otros campos, vaya fiesta, ej.;
SELECT DISTINCT IP, OS FROM SCAN
// el resultado es 3400 = donde el campo IP se repite X veces :-(

//Ni hablar de meter condiciones a la query ej.;
SELECT DISTINCT IP FROM SCAN WHERE OS IS NULL
// BOOM 2457 = el resultado real es 334 :-(

Resumiendo, la estructura del DB es:
ScansID, IP, OS etc. etc.

Resultado buscado

1. Contar quantas maquinas han pasado por un scan (IP no repetidas)
//Con el DISTINCT todo OK, meno que no puedo listar nada, porquè
//como añado campos me cambia el resultado con los doblones "de oro"
;-)

2. Obtener el listado de las maquinas que han pasado por un scan
3. Obtener el listado con los campos OS Like '%WIN%'
4. Obtener el listado con los campos OS NOT Like '%WIN%'
5. Obtener el listado con los campos OS NULL


Otra vez Gracias por tu tiempo.

==> McClan



Maxi a écrit :
Hola, podrias usar la funcion MAX ya que SqlServer no numera bajo ningun
concepto los registros. Otra solucion es que definas un orden y armes un
aquery para numerar de menor a mayor por ej.

Fijate si con el MAX te es util, de lo contrario me avisas y te paso un
ej de como hacerlo de otra forma.

Abrazos


"Mc_Clan" escribió en el mensaje
news:41b28a4d$0$8115$

Hola a Todos,

Estudio una soluccion para obtener una lista con PHP desde un DataBase
MSSQL, parece facil ScansID, IP, OS ... donde el campo IP se
repite, como hacer para obtener los ultimos IP in relaccion al campo de
ScansID ?? mientras yo seguia obteniendo dobles de IP mi colega haciendo
una Query con Microsoft Acces lo logra sin dobles. Cojo la query "de
acces" que nos dà un resultado tan bonito y que es la siguiente:-

SELECT MAX(Scan.ScansID) as MAXSCANSID, Scan.IP, LAST(Scan.OS) as LASTOS






FROM Scan
GROUP BY Scan.IP
HAVING (((LAST(SCAN.OS)) IS NULL))
ORDER BY Scan.IP







!!! Sorpresa !!! LAST no es un comando SQL (Comprobado tambien en Shell)

No sè que cxxxxx hace el acces con esta sintax pero la hace
funcionar..

Alguna idea???? (mismo sugerencia de como formular esta query desde PHP)

Muchas Gracias a Todos

McClan
NOTA

HE intentado tambien
SELECT DISTINCT IP // pero como le meto otro campo al lado se pasa el
DISTINCT para el forro.




Respuesta Responder a este mensaje
#4 Mc_Clan
05/12/2004 - 17:43 | Informe spam
Efectivamente, el uso correcto deberia ser el TOP + pero tengo ni
idea de como usar el TOP

La Base funciona asì:-
Todos los dias arranca un programa que escanea la classe B de la red,
escribe los datos en la base MSSQL, utilizando el campo ScansID como
campo numerico (Autoincrementacion) de identificacion del escaneo en curso.
Por lo tanto el primer escan ha sido el 1 ahora estarà por el 40, a
veces los ordenadores escaneado estan apagado o se ha echo alguna
intervencion para meterlo en conformità de un referencial.
Bueno, si busco por ejemplo el ordenador 192.X.X.1 lo encontrarè tantas
veces cuantas veces ha sido encontrado para el motor de escan y por lo
tanto enumerado en ScansID ej.

ScansID IP
=1 192.X.X.1
4 192.X.X.1
9 192.X.X.1

Encontrado 3 Veces, donde la ultima vez es el ScansID 9

Haciendo un SELECT DISTINCT IP FROM Scan me dà como resultado 1 (ScansID
= 9) que es correcto, pero si añado otros campos al SELECT para sacar
una lista (que cante mas sobre estos IP) o meter unas condiciones (WHERE
OS IS NULL) pierdo este privilegio de SELECT DISTINCT e vuelve a
contarme todas las veces que la IP ha Aparecido.

Gracias
=McClan


PS

estaba incorrecto, sorry

Maxi a écrit :
Hola, si el max no te es util has pensado en el TOP 1? el tema es qwue debes
definirme cual es el primer registro? con que criterio lo haces?

por ej: el que tiene la menor fecha?

Este concepto del last es un concepto de cursores y sqlserver como muchos
otros motores de BDD no estan diseñados ni optimizados para trabajar asi,
sino que trabajan con conjuntos de datos :)


"Mc_Clan" escribió en el mensaje
news:41b324ca$0$8117$

Ante de todo Muchissimas gracias por tu Ayuda,
La verdad es que me estoy volviendo loco.

Acabo de aprender porquè el LAST no funciona, por pura curiosidad lo digo,
aunque estoy seguro que ya lo sabes. LAST y FIRST Hacen parte del dialecto
JET-SQL y no de Transact-SQL, ademas no se aconseja el uso de estos etc.
etc. bueno, resultado, que el Access lo usa sin que se le pida nada y
desde PHP no logro hacer la query con el mismo resultado.

El Max no me funciona, te explico un poco aunque es realmente muy basico
por lo que probablemente por mi torpeza o desconocimiento me voy a dormir
hasta el año nuevo para la verguenza ;-)


Detalle:

Si hago:
SELECT DISTINCT IP FROM SCAN
// el resultado es 2608 = Correcto gracias a SELECT

Como intento añadir otros campos, vaya fiesta, ej.;
SELECT DISTINCT IP, OS FROM SCAN
// el resultado es 3400 = donde el campo IP se repite X veces :-(

//Ni hablar de meter condiciones a la query ej.;
SELECT DISTINCT IP FROM SCAN WHERE OS IS NULL
// BOOM 2457 = el resultado real es 334 :-(

Resumiendo, la estructura del DB es:
ScansID, IP, OS etc. etc.

Resultado buscado

1. Contar quantas maquinas han pasado por un scan (IP no repetidas)
//Con el DISTINCT todo OK, meno que no puedo listar nada, porquè
//como añado campos me cambia el resultado con los doblones "de oro"
;-)

2. Obtener el listado de las maquinas que han pasado por un scan
3. Obtener el listado con los campos OS Like '%WIN%'
4. Obtener el listado con los campos OS NOT Like '%WIN%'
5. Obtener el listado con los campos OS NULL


Otra vez Gracias por tu tiempo.

==>>McClan



Maxi a écrit :

Hola, podrias usar la funcion MAX ya que SqlServer no numera bajo ningun
concepto los registros. Otra solucion es que definas un orden y armes un
aquery para numerar de menor a mayor por ej.

Fijate si con el MAX te es util, de lo contrario me avisas y te paso un
ej de como hacerlo de otra forma.

Abrazos


"Mc_Clan" escribió en el mensaje
news:41b28a4d$0$8115$


Hola a Todos,

Estudio una soluccion para obtener una lista con PHP desde un DataBase
MSSQL, parece facil ScansID, IP, OS ... donde el campo IP se
repite, como hacer para obtener los ultimos IP in relaccion al campo de
ScansID ?? mientras yo seguia obteniendo dobles de IP mi colega haciendo
una Query con Microsoft Acces lo logra sin dobles. Cojo la query "de
acces" que nos dà un resultado tan bonito y que es la siguiente:-

SELECT MAX(Scan.ScansID) as MAXSCANSID, Scan.IP, LAST(Scan.OS) as LASTOS











FROM Scan



GROUP BY Scan.IP
HAVING (((LAST(SCAN.OS)) IS NULL))
ORDER BY Scan.IP









!!! Sorpresa !!! LAST no es un comando SQL (Comprobado tambien en Shell)

No sè que cxxxxx hace el acces con esta sintax pero la hace
funcionar..

Alguna idea???? (mismo sugerencia de como formular esta query desde PHP)

Muchas Gracias a Todos

McClan
NOTA

HE intentado tambien
SELECT DISTINCT IP // pero como le meto otro campo al lado se pasa el
DISTINCT para el forro.









Respuesta Responder a este mensaje
#5 Maxi
05/12/2004 - 19:48 | Informe spam
Hola, pues bueno aca podemos usar una ventaja que dan los autonumericos
cuando se los usa de forma correcta.

Veamos este ejemplo.

SELECT T1.ID, T2.IP FROM (SELECT MAX(CAMPO_AUTONUMERICO) AS
ID, IP FROM TABLA GROUP BY IP) T1 INNER JOIN
(SELECT CAMPOAUTONUMERICO,IP FROM TABLA) T2 ON
T1.CAMPOAUTONUMERICO = T2.ID


pd: adaptablo bien a tu tabla por favor.

Un abrazo


"Mc_Clan" escribió en el mensaje
news:41b33aa6$0$9052$
Efectivamente, el uso correcto deberia ser el TOP + pero tengo ni
idea de como usar el TOP

La Base funciona asì:-
Todos los dias arranca un programa que escanea la classe B de la red,
escribe los datos en la base MSSQL, utilizando el campo ScansID como
campo numerico (Autoincrementacion) de identificacion del escaneo en curso.
Por lo tanto el primer escan ha sido el 1 ahora estarà por el 40, a
veces los ordenadores escaneado estan apagado o se ha echo alguna
intervencion para meterlo en conformità de un referencial.
Bueno, si busco por ejemplo el ordenador 192.X.X.1 lo encontrarè tantas
veces cuantas veces ha sido encontrado para el motor de escan y por lo
tanto enumerado en ScansID ej.

ScansID IP
=1 192.X.X.1
4 192.X.X.1
9 192.X.X.1

Encontrado 3 Veces, donde la ultima vez es el ScansID 9

Haciendo un SELECT DISTINCT IP FROM Scan me dà como resultado 1 (ScansID
= 9) que es correcto, pero si añado otros campos al SELECT para sacar
una lista (que cante mas sobre estos IP) o meter unas condiciones (WHERE
OS IS NULL) pierdo este privilegio de SELECT DISTINCT e vuelve a
contarme todas las veces que la IP ha Aparecido.

Gracias
=McClan


PS

estaba incorrecto, sorry

Maxi a écrit :
Hola, si el max no te es util has pensado en el TOP 1? el tema es qwue
debes definirme cual es el primer registro? con que criterio lo haces?

por ej: el que tiene la menor fecha?

Este concepto del last es un concepto de cursores y sqlserver como muchos
otros motores de BDD no estan diseñados ni optimizados para trabajar asi,
sino que trabajan con conjuntos de datos :)


"Mc_Clan" escribió en el mensaje
news:41b324ca$0$8117$

Ante de todo Muchissimas gracias por tu Ayuda,
La verdad es que me estoy volviendo loco.

Acabo de aprender porquè el LAST no funciona, por pura curiosidad lo digo,
aunque estoy seguro que ya lo sabes. LAST y FIRST Hacen parte del dialecto
JET-SQL y no de Transact-SQL, ademas no se aconseja el uso de estos etc.
etc. bueno, resultado, que el Access lo usa sin que se le pida nada y
desde PHP no logro hacer la query con el mismo resultado.

El Max no me funciona, te explico un poco aunque es realmente muy basico
por lo que probablemente por mi torpeza o desconocimiento me voy a dormir
hasta el año nuevo para la verguenza ;-)


Detalle:

Si hago:
SELECT DISTINCT IP FROM SCAN
// el resultado es 2608 = Correcto gracias a SELECT

Como intento añadir otros campos, vaya fiesta, ej.;
SELECT DISTINCT IP, OS FROM SCAN
// el resultado es 3400 = donde el campo IP se repite X veces :-(

//Ni hablar de meter condiciones a la query ej.;
SELECT DISTINCT IP FROM SCAN WHERE OS IS NULL
// BOOM 2457 = el resultado real es 334 :-(

Resumiendo, la estructura del DB es:
ScansID, IP, OS etc. etc.

Resultado buscado

1. Contar quantas maquinas han pasado por un scan (IP no repetidas)
//Con el DISTINCT todo OK, meno que no puedo listar nada, porquè
//como añado campos me cambia el resultado con los doblones "de oro"
;-)

2. Obtener el listado de las maquinas que han pasado por un scan
3. Obtener el listado con los campos OS Like '%WIN%'
4. Obtener el listado con los campos OS NOT Like '%WIN%'
5. Obtener el listado con los campos OS NULL


Otra vez Gracias por tu tiempo.

==>>McClan



Maxi a écrit :

Hola, podrias usar la funcion MAX ya que SqlServer no numera bajo ningun
concepto los registros. Otra solucion es que definas un orden y armes un
aquery para numerar de menor a mayor por ej.

Fijate si con el MAX te es util, de lo contrario me avisas y te paso un
ej de como hacerlo de otra forma.

Abrazos


"Mc_Clan" escribió en el mensaje
news:41b28a4d$0$8115$


Hola a Todos,

Estudio una soluccion para obtener una lista con PHP desde un DataBase
MSSQL, parece facil ScansID, IP, OS ... donde el campo IP se
repite, como hacer para obtener los ultimos IP in relaccion al campo de
ScansID ?? mientras yo seguia obteniendo dobles de IP mi colega haciendo
una Query con Microsoft Acces lo logra sin dobles. Cojo la query "de
acces" que nos dà un resultado tan bonito y que es la siguiente:-

SELECT MAX(Scan.ScansID) as MAXSCANSID, Scan.IP, LAST(Scan.OS) as LASTOS











FROM Scan



GROUP BY Scan.IP
HAVING (((LAST(SCAN.OS)) IS NULL))
ORDER BY Scan.IP









!!! Sorpresa !!! LAST no es un comando SQL (Comprobado tambien en Shell)

No sè que cxxxxx hace el acces con esta sintax pero la hace
funcionar..

Alguna idea???? (mismo sugerencia de como formular esta query desde PHP)

Muchas Gracias a Todos

McClan
NOTA

HE intentado tambien
SELECT DISTINCT IP // pero como le meto otro campo al lado se pasa el
DISTINCT para el forro.









Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida