Dividir una columna en dos teniendo en cuenta valor de otra columna t/sql
Publicado por Galatea (2 intervenciones) el 01/08/2020 17:35:10
Hola!
Quisiera saber si alguien sabe como hacer para separar una columna que tiene fechas de estados activo e inactivo de un dispositivo. El problema está en que hay fechas donde no hubo cambio en el estado del dispositivo, simplemente hubo alguna modificacion sobre el mismo, pero no afectó su estado. Necesito separar las fechas en que el dispositivo cambió de estado para obtener la fecha inicial y final de cada estado.
He tratado, para obtener la fecha final, haciendo join a la misma tabla y usando un CASE WHEN, pero finalmente de alguna manera tengo que tener en cuenta que la fecha que no tiene cambio de estado no deberia ser tenida en cuenta y no tengo idea de como hacer eso.
Este es un ejemplo de lo que hasta ahora he tratado de hacer y solo llego a poner la fecha mayor frente a la menor, pero no tengo idea como hacer para que solo tome las fechas en las que hubo modificación de estado y que finalmente me deje como fecha inicial fecha en la que quedó activo el dispositivo y al frente de esta la fecha 31/12/9999:
SELECT
t1.IdDispo,
t1.IdEstado,
t1.Fecha as FechaInicial,
CASE WHEN t2.fecha > t2.fecha THEN t2.fecha ELSE '31/12/9999' END AS FechaFinal
FROM
tablaEstados t1 inner join tablaEstados t2 on t1.IdDispo = t2.idDispo
Agradezco a quien me pueda ayudar diciendome cómo podría acercarme al resultado. Es necesario que la solucion se adapte a T/SQL pues el desarrollo es en Databricks


Quisiera saber si alguien sabe como hacer para separar una columna que tiene fechas de estados activo e inactivo de un dispositivo. El problema está en que hay fechas donde no hubo cambio en el estado del dispositivo, simplemente hubo alguna modificacion sobre el mismo, pero no afectó su estado. Necesito separar las fechas en que el dispositivo cambió de estado para obtener la fecha inicial y final de cada estado.
He tratado, para obtener la fecha final, haciendo join a la misma tabla y usando un CASE WHEN, pero finalmente de alguna manera tengo que tener en cuenta que la fecha que no tiene cambio de estado no deberia ser tenida en cuenta y no tengo idea de como hacer eso.
Este es un ejemplo de lo que hasta ahora he tratado de hacer y solo llego a poner la fecha mayor frente a la menor, pero no tengo idea como hacer para que solo tome las fechas en las que hubo modificación de estado y que finalmente me deje como fecha inicial fecha en la que quedó activo el dispositivo y al frente de esta la fecha 31/12/9999:
SELECT
t1.IdDispo,
t1.IdEstado,
t1.Fecha as FechaInicial,
CASE WHEN t2.fecha > t2.fecha THEN t2.fecha ELSE '31/12/9999' END AS FechaFinal
FROM
tablaEstados t1 inner join tablaEstados t2 on t1.IdDispo = t2.idDispo
Agradezco a quien me pueda ayudar diciendome cómo podría acercarme al resultado. Es necesario que la solucion se adapte a T/SQL pues el desarrollo es en Databricks
Valora esta pregunta


0