Использование MySQL DATE_ADD, 5-дневный интервал

Я пытаюсь выбрать общую сумму заказа ($) и количество счетов за 5-дневный период в одном запросе. Хотя я не могу этого добиться. Текущий запрос у меня здесь ...

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'

Я не совсем уверен, что DATE_ADD - это та функция, которую я ищу.

В настоящее время я получаю ....

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

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

Я бы хотел получить что-то более похожее на ...

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
    )
)

Я новичок в функциях даты mysql, поэтому, возможно, я просто пропустил нужную мне функцию при просмотре документации mysql.

ОБНОВЛЕНИЕ. Я обновил свой запрос ... Он по-прежнему не выводит строку за каждый день, за который были выставлены счета. Он получает счета-фактуры только с 19-го числа, когда есть счета-фактуры с 20-го числа, соответствующие критериям 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

person Webnet    schedule 21.04.2010    source источник


Ответы (3)


Чтобы получить записи между датами, используйте:

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

В этом примере вы получите записи (при условии, что они существуют на сегодняшний день, включая время) между сегодняшним днем ​​и днями в будущем. Посмотрите на DATE_SUB, если хотите вернуться в прошлое.

person OMG Ponies    schedule 21.04.2010
comment
Могу ли я получить значения по умолчанию для любых цифр, которые не существуют в указанный период времени? - person Webnet; 22.04.2010
comment
@Webnet: вам нужен список дат, охватывающий желаемый диапазон, чтобы ЛЕВОЕ СОЕДИНЕНИЕ к таблице IDS_INVOICE на основе даты и значения created. В MySQL нет рекурсивного подзапроса - вы можете создать таблицу чисел или использовать настройку CROSS JOIN, чтобы получить необходимое вычисление даты. - person OMG Ponies; 22.04.2010
comment
Я понимаю логику того, что вы говорите, это имеет смысл. Вы говорите, что мне нужно SELECT COUNT(id) as invoice_count FROM ids_invoice LEFT JOIN ids_invoice WHERE created BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 5 DAY) Я уверен, что это очевидно .... но я не уверен в синтаксисе того, о чем вы говорите. - person Webnet; 22.04.2010
comment
Выспавшись на нем, я думаю, что лучше понимаю, о чем вы говорите, и понимаю, насколько неверен приведенный выше запрос ... Я потратил немного времени на Google и не смог найти пример того, о чем вы говорите ... - person Webnet; 22.04.2010

Если ваш созданный тип столбца - int, просто попробуйте этот

created<= UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL 5 DAY))')
person afaaro    schedule 21.03.2014

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

или было бы лучше сравнить только DATE часть datetime:

WHERE DATE(created) <= date(NOW()) AND 
  DATE(created) >= DATE(NOW() - INTERVAL 5 DAY)
person a1ex07    schedule 21.04.2010