Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

667
Vistas
¿Consulta SQL para obtener un valor directo basado en alguna condición? (Sin usar la función de ventana)

Tengo 2 columnas - Fecha y estado

 CampaignID Date Status 123 2019-07-10 Active 123 2019-07-09 Paused 123 2019-07-08 Paused 123 2019-07-07 Active 123 2019-07-06 Paused

Consideremos que estos son los datos de la campaña y necesitamos encontrar la próxima fecha activa de la campaña en la nueva columna como active_date que se indica a continuación. Por ejemplo, si la campaña está en pausa en la fecha, entonces necesito la próxima fecha (en una nueva columna) siempre que la campaña esté activa.
Ayúdame con la consulta SQL sin usar funciones de ventana, ya que mi base de datos no admite funciones de ventana.

 CampaignID Date Status Active_date 123 2019-07-10 Active 123 2019-07-09 Paused 2019-07-10 123 2019-07-08 Paused 2019-07-10 123 2019-07-07 Active 123 2019-07-06 Paused 2019-07-07
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Podría usar una subconsulta correlacionada para completar la última columna de fecha activa:

 SELECT CampaignID, Date, Status, CASE WHEN Status <> 'Active' THEN (SELECT t2.Date FROM yourTable t2 WHERE t2.CampaignID = t1.CampaignID AND t2.Date > t1.Date AND t2.Status = 'Active' ORDER BY t2.Date LIMIT 1) END AS Active_Date FROM yourTable t1 ORDER BY CampaignID, Date DESC;

captura de pantalla del enlace de demostración a continuación

Manifestación

La lógica básica utilizada anteriormente es sencilla. Para cada registro cuyo estado no está activo, la subconsulta correlacionada mira hacia adelante e intenta encontrar la fecha del registro más cercano cuyo estado está activo. También solo realizamos esta búsqueda para registros que pertenecen a la misma campaña.

over 4 years ago · Santiago Trujillo Denunciar

0

Recomendaría usar funciones de ventana:

 select t.*, (case when status <> 'Active' then min(case when status = 'Active' then Date end) over (partition by CampaignId order by date desc) end) as next_active from t order by CampaignID, Date desc;

Aquí hay un db<>fiddle.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda