2010-04-21 55 views
10

Estoy tratando de seleccionar la suma total del pedido ($) y el recuento de facturas durante un período de 5 días en una sola consulta. Parece que no puedo hacer que esto suceda. La consulta actual que tengo es aquí ...Uso de MySQL DATE_ADD, intervalo de 5 días

SELECT 
    COUNT(id) as invoice_count, 
    SUM(orderTotal) as orders_sum, 
    UNIX_TIMESTAMP(created) as created 
FROM ids_invoice 
WHERE DATE_ADD(created, INTERVAL +1 DAY) 
AND userId = 23 LIMIT 5' 

No estoy del todo seguro de DATE_ADD es la función correcta que estoy buscando.

Actualmente me estoy haciendo ....

Array ( 
    [0] => Array ( 
     [invoice_count] => 420 
     [orders_total] => 97902.90 
     [created] => 1252596560 
    ) 
) 

Array ( 
    [0] => Array ( 
     [invoice_count] => 68 
     [orders_total] => 14193.20 
     [created] => 1262900809 
    ) 
) 

me gustaría conseguir algo más como ...

Array ( 
    [0] => Array ( 
     [invoice_count] => 18 
     [orders_total] => 4902.90 
     [date] => 04-19-2010 
    ) 
) 

Array ( 
    [0] => Array ( 
     [invoice_count] => 12 
     [orders_total] => 5193.20 
     [date] => 04-20-2010 
    ) 
) 

Soy bastante nuevo a las funciones de fecha MySQL así que quizás Me perdí la función que necesitaba al revisar los documentos de mysql.

ACTUALIZACIÓN He actualizado mi consulta ... Esto todavía no saca una fila por cada día que hubo facturas. Solo está extrayendo facturas desde el 19 cuando hay facturas desde el 20 que cumplen los criterios userId.

SELECT 
    COUNT(id) as invoice_count, 
    SUM(orderTotal) as orders_sum, 
    UNIX_TIMESTAMP(created) as created 
FROM ids_invoice 
WHERE 
    created BETWEEN "2010-04-19 00:00:00" AND DATE_ADD("2010-04-19 00:00:00", INTERVAL +5 DAY) AND 
    userId = 17 

Respuesta

17

Para obtener registros entre un lapso fecha, el uso:

WHERE created BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 5 DAY) 

Este ejemplo se obtener sus registros (suponiendo que existan para hoy, incluido el tiempo) para entre hoy y días en el futuro. Mira DATE_SUB si quieres ir al pasado.

+0

¿Es posible para mí para obtener los valores predeterminados para las figuras que no existen dentro del plazo especificado? – Webnet

+0

@Webnet: necesita una lista de fechas que abarque el rango que desea, para IZQUIERDA UNIRSE en la tabla 'IDS_INVOICE' en función de la fecha y el valor 'creado'. MySQL no tiene subconsulta recursiva: puede crear una tabla de números o utilizar una configuración CROSS JOIN para obtener el cálculo de fecha que necesita. –

+0

Entiendo la lógica de lo que dices, tiene perfecto sentido. Estás diciendo que necesito 'SELECT COUNT (id) como invoice_count FROM ids_invoice IZQUIERDA UNIR ids_invoice WHERE creado ENTRE AHORA() Y DATE_ADD (AHORA(), INTERVALO DE 5 DÍAS)' Estoy seguro de que es obvio ... pero no estoy seguro de la sintaxis de lo que estás hablando. – Webnet

0
WHERE created <= NOW() AND created >=NOW() - INTERVAL 5 DAY 

o sería mejor comparar simplemente parte de fecha de fecha y hora:

WHERE DATE(created) <= date(NOW()) AND 
    DATE(created) >= DATE(NOW() - INTERVAL 5 DAY) 
2

Si el tipo de columna creada es de tipo int a continuación, sólo prueba este

created<= UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL 5 DAY))') 
Cuestiones relacionadas