SQL Server - Consulta selección.

 
Vista:
sin imagen de perfil

Consulta selección.

Publicado por Mike (2 intervenciones) el 29/05/2017 10:41:18
Buenas,

A ver si me podéis ayudar con una consultilla que creo que para la gente que sabe no le costará mucho =)

Consulta que muestre los fallos de comunicación de un dispositivo agrupados por dispositivo, nº de veces que ha fallado, tiempo total transcurrido en fallo.


La tabla origen sobre la que habría que hacer la consulta tiene los siguientes campos: IDAlarma, IDDispositivo, CausaAvería, FechaAveria, Time.


UN REGISTRO DEVUELTO DEBERÍA SER ESTE.
DISPOSITIVO Nº FALLOCOMMS TIEMPO EN FALLO COMM FECHA
001 4 00:05:13(tipo varchar) 25/05 (tipo fecha).

No controlo demasiado de SQL y no sabría como agrupar el nº de fallos comm y sumar el tiempo de fallo (siendo varchar). El filtro para sacar los fallos de entre todas las alarmas sería WHERE CausaAvería = 'Fallo dispositivo'.

Gracias de antemano.
Saludos.
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta selección.

Publicado por Isaias (4558 intervenciones) el 29/05/2017 16:45:05
Antes de darte una opinion, ¿Que motor y version de base de datos estas trabajando?, envia la descripcion de tu tabla, columnas y tipos de datos.
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

Consulta selección.

Publicado por Mike (2 intervenciones) el 29/05/2017 16:59:49
Estoy trabajando con SQL Server 2008 R2.

La tabla en cuestión tiene los siguientes campos:

IDAlarma: int
IDDispositivo: varchar(7)
CausaAvería: varchar(100) --> Clausula WHERE CausaAvería = 'Fallo dispositivo'
FechaAveria: datetime
FechaAveríaOff: datetime
Time: varchar (este campo muestra el tiempo que esta la avería activa --> FechaAveríaOff-FechaAvería).
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta selección.

Publicado por Isaias (4558 intervenciones) el 29/05/2017 18:00:06
Es muy mala practica ocupar tipos de campo (en este caso VARCHAR), para almacenar datos de tipo HORA.

Vas a tener que hacer una conversion de dato.

Te muestro como SUMAR tiempo, partamos de ahi:
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
drop table #Operador;
 
create table #Operador (operadorid int, hora time(0))
 
insert into #Operador values(451073, '04:00'),
(451073, '03:00'),
(451083, '05:00'),
(451083, '04:00'),
(900200, '08:00'),
(900200, '13:30')
 
-- Total por Segundos
select  operadorid, sum( DATEPART(SECOND, hora) + 60 *
        DATEPART(MINUTE, hora) + 3600 *
        DATEPART(HOUR, hora))
from #Operador
group by operadorid
 
-- Total por Horas
;WITH w(e, mw) AS
(
    SELECT operadorid, SUM(DATEDIFF(MINUTE, '0:00:00', hora))
    FROM dbo.#Operador 
    -- WHERE ...
    GROUP BY operadorid
)
SELECT operadorid = e,
  hora = RTRIM(mw/60) + ':' + RIGHT('0' + RTRIM(mw%60),2)
  FROM w;

Lo demas es muy simple, solo tienes que utllizar GROUP BY, para realizar la agrupacion.
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