Mostrando entradas con la etiqueta base de datos. Mostrar todas las entradas
Mostrando entradas con la etiqueta base de datos. Mostrar todas las entradas

lunes, 16 de diciembre de 2013

SQL - selección en base a rangos de fechas

Patrón:
- La relación tiene atributos de fecha inicio y fin (fecha_inicio_relación y fecha_fin_relación).
- La selección se quiere hacer según un rango fecha inicio y fin (fecha_inicio_selección y fecha_fin_selección), seleccionando todas en las que los segmentos se toquen o se superpongan (ver imagen):




fecha_inicio_relación                         fecha_fin_relación
|——————————————|
fecha_inicio_selección                       fecha_fin_selección
|——————————————|


Query:

select * from relación where (fecha_inicio_relación <= fecha_inicio_selección and fecha_fin_relación >= fecha_inicio_selección or fecha_inicio_relación <= fecha_fin_selección and fecha_fin_relación >= fecha_fin_selección or fecha_inicio_relación >= fecha_inicio_selección and fecha_fin_relación <= fecha_fin_selección or fecha_inicio_relación <= fecha_inicio_selección and fecha_fin_relación >= fecha_fin_selección)
-- validaciones de consistencia
and fecha_inicio_relación <= fecha_fin_relación and fecha_inicio_selección <= fecha_fin_selección

martes, 3 de septiembre de 2013

DB2 - manejar jerarquías de idiomas

En DB2, seleccionar datos de una tabla "tabla_origen", buscando con una "mi_clave_busqueda" que tiene multiplicidad n (los datos están en n idiomas), de los cuales me interesa recuperar el idioma que (para mí) tenga mayor prioridad, si no el siguiente, y así sucesivamente.



with mis_idiomas as(
      select * from table (
            select 'es',  1 from sysibm.sysdummy1 union all
            select 'fr',  2 from sysibm.sysdummy1 union all
            select 'en',  3 from sysibm.sysdummy1 union all
            select 'he',  4 from sysibm.sysdummy1
      ) as t (idioma, ord)
),
T2 as(
      select tor.mi_clave_busqueda, min(ord) as ord from tabla_origen tor inner join mis_idiomas ml on tor.cod_idioma=ml.idioma group by tor.mi_clave_busqueda
)
select tor.mis_valores_buscados from T2 inner join mis_idiomas ml on T2.ord=ml.ord inner join tabla_origen tor on T2.mi_clave_busqueda=tor.mi_clave_busqueda and ml.idioma=tor.idioma