Cita:
Iniciado por Libras y el campo fecha que valores tiene? si lo tienes con una fecha creo que es posible usar alguna de las funciones de sql server, otra pregunta, repites los valores de nombre, estos se repiten???
Podrias usar esto:
Código SQL:
Ver originalCREATE TABLE #temp
(
id INT IDENTITY(1,1),
valor VARCHAR(20),
valor1 INT
)
INSERT INTO #temp VALUES ('Inicio', 111)
INSERT INTO #temp VALUES ('Mover', 111)
INSERT INTO #temp VALUES ('Bajar', 111)
INSERT INTO #temp VALUES ('Termina', 111)
INSERT INTO #temp VALUES ('Inicio', 999)
INSERT INTO #temp VALUES ('mover', 999)
INSERT INTO #temp VALUES ('Termina', 999)
INSERT INTO #temp VALUES ('Inicio', 888)
INSERT INTO #temp VALUES ('mover', 888)
INSERT INTO #temp VALUES ('Inicio', 222)
SELECT *, dense_rank() OVER(ORDER BY valor1) AS col FROM #temp ORDER BY id
Y da como resultado esto:
id valor valor1 col
1 Inicio 111 1
2 Mover 111 1
3 Bajar 111 1
4 Termina 111 1
5 Inicio 999 4
6 mover 999 4
7 Termina 999 4
8 Inicio 888 3
9 mover 888 3
10 Inicio 222 2
o puedes usar esto:
Código SQL:
Ver originalSELECT t1.*,campo FROM #temp AS t1 LEFT JOIN
(
SELECT DENSE_RANK() OVER(ORDER BY id) AS campo,valor,valor1,id FROM #temp WHERE valor='inicio'
) AS t2 ON (t1.id=t2.id)
donde da como resultado esto:
id valor valor1 campo
1 Inicio 111 1
2 Mover 111 NULL
3 Bajar 111 NULL
4 Termina 111 NULL
5 Inicio 999 2
6 mover 999 NULL
7 Termina 999 NULL
8 Inicio 888 3
9 mover 888 NULL
10 Inicio 222 4
Hola, gracias por contestar, desconocia la función de dense_rank(), pero resulta que no tengo una columna que se repita y con la cual podría agrupar como los valores 111 y 222 que pones de ejemplo.
Lo que estoy estoy realizando es lo siguiente:
Código SQL:
Ver originalSELECT nes.ProcessStart
,nes.ProceesEnd
,h.*
FROM temp h
LEFT JOIN (
SELECT nh3.id ProcessStart
,ne2.id ProceesEnd
,nh3.Row2 RowStart
,ne2.ROW RowEnd
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY nh2.ROW)Row2
,nh2.*
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY nh.ID)ROW
,nh.*
FROM temp nh
)nh2
WHERE nh2.valor = 'Inicio'
)nh3
LEFT JOIN (
SELECT ROW_NUMBER() OVER(ORDER BY ne.ROW) Row2
,ne.* FROM (
SELECT ROW_NUMBER() OVER(ORDER BY nh.ID)ROW
,nh.*
FROM temp nh
)ne
WHERE ne.valor = 'Inicio'
)ne2 ON (ne2.Row2) = nh3.Row2+1
)nes ON nes.ProcessStart <= h.ID
AND (nes.ProceesEnd > h.ID OR nes.ProceesEnd IS NULL)
El query que estoy realizando agrupa bien siempre y cuando esten ordenados, es decir, sea de inicia, mover, bajar, terminar, pero no cuando se dos procesos inician la misma veces, así inicio, inicio, mover....