2010-03-31 23 views
5

Para esta consultamysql min ignora null - necesidad solución/ajustar

SELECT min(date) min_date FROM order_products group by order_id 

min_date ignora los NULL valores de un grupo de orden de identificación.

En mi caso quiero min_date = NULL si el grupo tiene una tupla order_products con valor nulo en la fecha.

¿Alguna idea de cómo puedo lograr esto?

Respuesta

9

una solución sencilla podría ser:

SELECT min(IFNULL(date, '1970-01-01')) AS min_date 
FROM order_products 
GROUP BY order_id 

lo tanto, si 1970/01/01 aparece, usted sabe que hay un valor NULL.

+0

esta consulta devuelve todos los valores min_date como '1970-01-01'. ¿Estás seguro de que este funciona, lo has probado antes? – shikhar

+1

@shikhar: No, no lo intenté antes, pero lo intenté ahora y está funcionando para mí. Tal vez hay NULL en todos los pedidos? – Bobby

+0

hey gracias ... realmente tenía todos los NULL ... funcionó – shikhar

0

Una de las maneras de hacerlo, si su dominio problemático permite definir una "fecha mínima absoluta", es usar la expresión ISNULL()/COALESCE() para convertir un campo que admite nulos en no nulo.

ISNULL(dateField, '1000-01-01')

Otro (f ningún defecto significativo "más pequeño" puede ser definido) es hacerlo a través de 2 consultas - primer material selecto con nulos, entonces, si el conjunto de resultados está vacío, añadir en la materia, donde la fecha es no nula

0

o, cuando todas las filas no son nulas, devuelva la fecha mínima, de lo contrario, devuelva nulo.

1

Si la pregunta es sobre encontrar la fecha mínima de varias columnas, entonces lo siguiente podría ayudar;

SELECT 
     LEAST 
      (IFNULL(date_1, date(CURRENT_DATE()+1)), 
      IFNULL(date_2, date(CURRENT_DATE()+1)), 
      IFNULL(date_3, date(CURRENT_DATE()+1))) as MinimumDate 
FROM YourTable;