Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

una query complicadilla para mi

Estas en el tema de una query complicadilla para mi en el foro de SQL Server en Foros del Web. Buenas a todos. tengo un problemilla con una query... Vereis tengo una tabla con 3 columnas. Clave primaria tipo integer(clave), otra columna (cantidad) integer tambien ...
  #1 (permalink)  
Antiguo 24/01/2009, 12:50
 
Fecha de Ingreso: enero-2009
Mensajes: 15
Antigüedad: 15 años, 3 meses
Puntos: 0
una query complicadilla para mi

Buenas a todos.

tengo un problemilla con una query...
Vereis tengo una tabla con 3 columnas. Clave primaria tipo integer(clave), otra columna (cantidad) integer tambien y la ultima (fecha) de tipo datetime
del estilo de dd/mm/aaaa hh:mm:ss
En la columna cantidad todos los registros tienen el mismo valor, 5 por ejemplo.
Pues bien quiero obtener la clave que mas valores 5 tenga en la misma fecha, pero la misma fecha es solo en dia/mes/año despreciando la hora.
Y me estoy haciendo un lio entre el count, sum, distint y las funciones de year, month y day...... y demas.

Alguien me puede echar una mano con esta query? por favor

Un saludo y muchas gracias por adelantado
  #2 (permalink)  
Antiguo 24/01/2009, 13:24
 
Fecha de Ingreso: enero-2009
Mensajes: 15
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: una query complicadilla para mi

como se puede descomponer el datatime para trabajar solo con el dia, mes y año?
  #3 (permalink)  
Antiguo 24/01/2009, 19:25
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: una query complicadilla para mi

Cita:
Iniciado por maketoak Ver Mensaje
como se puede descomponer el datatime para trabajar solo con el dia, mes y año?
Código sql:
Ver original
  1. SELECT CONVERT(VARCHAR(10),fecha,103)
  2. FROM tabla
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #4 (permalink)  
Antiguo 24/01/2009, 19:59
 
Fecha de Ingreso: enero-2009
Mensajes: 165
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: una query complicadilla para mi

pregunto: tienes necesidad de guardar la hora para algo más?
si no la necesitas para nada, puedes cambiar el campo fecha de la base de datos de DATETIME a DATE solamente
  #5 (permalink)  
Antiguo 24/01/2009, 21:02
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: una query complicadilla para mi

En qué version de SQL Server hay el tipo de datos Date???
Lo que si podrias hacer es cambiar el tipo a varchar(10).
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #6 (permalink)  
Antiguo 26/01/2009, 10:20
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: una query complicadilla para mi



Hasta la version 2008...

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #7 (permalink)  
Antiguo 26/01/2009, 13:21
 
Fecha de Ingreso: enero-2009
Mensajes: 15
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: una query complicadilla para mi

Buenas.


Trabajo con SQL Server 2005. Estoy obligado a que el formato de la fecha-hora sea eso mismo, datatime. Mas adelante usare la hora.
Despues de darle muchas vueltas y hacer mil y una cabala ya he conseguido sacar por separado el dia, el mes y el año asi vamos bien . Ahora le duda que me surge es como contar el numero de registros que son iguales pero habra mas de un subconjunto de registros iguales dentro del conjunto total de la tabla, y tendria que obtener el registro que mas veces se repite, su clave vamos. Algo asi como ir recorriendo la tabla contando los registrso iguales entre si y obtener el mayor de ellos pero nu se mu bien como. No se me habeis entendido con estas explicaciones por si es ke no os dejo un ejemplo: Es una tabla con registros, pues bien habra que devolver el numero 2, por que aunque el 4 tambien se repite el dos se respite mas veces ;).
Se os ocurre como podria hacerlo?.

Clave atrib. A atrib. B
1 A B
1 AA B
2 AAA BBB
2 AAA BBB
2 AAA BBB
3 AA B
3 A BB
4 A B
4 AA BB
4 AA BB

Gracias a todos por responder y un saludo majos

Última edición por maketoak; 26/01/2009 a las 13:25 Razón: corregir
  #8 (permalink)  
Antiguo 26/01/2009, 13:43
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: una query complicadilla para mi

Ya no entendi...

La tabla tenia tres campos (dos numericos y uno fecha)..

No es el mismo ejemplo?

Muestranos la estructura real de tu tabla para ir armando el query..

saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #9 (permalink)  
Antiguo 26/01/2009, 14:51
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: una query complicadilla para mi

Cita:
Iniciado por Andres95 Ver Mensaje


Hasta la version 2008...

Saludos!
Te refieres que en la versión 2008 existe el tipo de dato Date? Porque por mas que busco no encuentro dicho tipo de dato ni en 2000 ni 2005.

Prueba asi:
Código sql:
Ver original
  1. SELECT Clave, MAX(len([atrib. A])), MAX(len([atrib. B]))
  2. FROM tabla
  3. GROUP BY Clave
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #10 (permalink)  
Antiguo 26/01/2009, 15:03
 
Fecha de Ingreso: enero-2009
Mensajes: 15
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: una query complicadilla para mi

Cita:
Iniciado por Andres95 Ver Mensaje
Ya no entendi...

La tabla tenia tres campos (dos numericos y uno fecha)..

No es el mismo ejemplo?

Muestranos la estructura real de tu tabla para ir armando el query..

saludos!
buenas.

Es que ando simplificando la tabla para que sea mas sencillo. Siento la confusion.
Vale, al final todo queda en: Una tabla (obtenida de una select) con dos campos. Clave y otro numerico.
y la pregunta es:
como sacar la clave con el campo numerico mayor?.
Ahora ya es mas facil la pregunta a ke si.

un saludo.
  #11 (permalink)  
Antiguo 26/01/2009, 15:12
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: una query complicadilla para mi

Flavio:

Si, (disculpa mi uso inadecuado del lenguaje ) queria decir que en la version 2008 ya lo tienes disponible.

SQL Server 2008: DATE, TIME, DATETIME2, DATETIMEOFFSET ...a la vista!

--

Maketoak:

tal vez esto te sirva, comentanos:

Código:
Select Clave, valornumerico
From
(Select max (valornumerico)  valornumerico From MiTabla) s
Inner join
     MiTabla  T
On  S.valornumerico = T.valornumerico
Group by Clave, valornumerico

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #12 (permalink)  
Antiguo 26/01/2009, 15:29
 
Fecha de Ingreso: enero-2009
Mensajes: 15
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: una query complicadilla para mi

ya me he vuelto a liar....

si yo hago


create view tabla101 (licencia,maximo)
as
(select tabla2.licencia,sum(licencia) as valor
from (select licencia,
day(tabla1.fechahora) as dia,
month(tabla1.fechahora) as mes,
year(tabla1.fechahora) as año
from (select licencia,cantidad,fechahora
from entrega
where cantidad='5000') as tabla1) as tabla2
group by tabla2.licencia,tabla2.dia,tabla2.mes,tabla2.año
having count(*)>1



y me da una vista con dos campos. clave y otro numerico.

y luego hago

select licencia
from tabla101
where maximo = (select max(maximo) from tabla101)


perfecto!. obtengo lo que quiero.

pero me gustaria no usar el CREATE VIEW. y la pregunta es:

por que no funciona

select licencia
from ** AQUI PONGO LA SELECT DEL CREATE VIEW** as aux
where aux.maximo = (select max(aux.maximo) from aux)


vamos que al final me he ido respondiendo yo mismo con ayudita de andres95.
gracais por todo y a ver si consigo meterlo todo en una query y dejarme de vistas.
A alguien se le ocurre algo ?

saludos.

Última edición por maketoak; 26/01/2009 a las 16:06
  #13 (permalink)  
Antiguo 26/01/2009, 16:41
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: una query complicadilla para mi

Prueba asi:
Código sql:
Ver original
  1. SELECT licencia
  2. FROM (
  3. SELECT tabla2.licencia,SUM(licencia) AS maximo
  4. FROM (SELECT licencia,
  5. DAY(tabla1.fechahora) AS dia,
  6. MONTH(tabla1.fechahora) AS mes,
  7. YEAR(tabla1.fechahora) AS año
  8. FROM (SELECT licencia,cantidad,fechahora
  9. FROM entrega
  10. WHERE cantidad='5000') AS tabla1) AS tabla2
  11. GROUP BY tabla2.licencia,tabla2.dia,tabla2.mes,tabla2.año
  12. HAVING COUNT(*)>1) [tabla101]
  13. WHERE maximo = (SELECT MAX(maximo) FROM tabla101)
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #14 (permalink)  
Antiguo 26/01/2009, 18:20
 
Fecha de Ingreso: enero-2009
Mensajes: 15
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: una query complicadilla para mi

Cita:
Iniciado por flaviovich Ver Mensaje
Prueba asi:
Código sql:
Ver original
  1. SELECT licencia
  2. FROM (
  3. SELECT tabla2.licencia,SUM(licencia) AS maximo
  4. FROM (SELECT licencia,
  5. DAY(tabla1.fechahora) AS dia,
  6. MONTH(tabla1.fechahora) AS mes,
  7. YEAR(tabla1.fechahora) AS año
  8. FROM (SELECT licencia,cantidad,fechahora
  9. FROM entrega
  10. WHERE cantidad='5000') AS tabla1) AS tabla2
  11. GROUP BY tabla2.licencia,tabla2.dia,tabla2.mes,tabla2.año
  12. HAVING COUNT(*)>1) [tabla101]
  13. WHERE maximo = (SELECT MAX(maximo) FROM tabla101)
si señor !

Un olé por flavio
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:38.