2012-04-18 3 views
0

Я исчерпал свои поиски, ища решение для расчета даты в MySQL. Мой клиент хочет узнать, сколько сделок было сделано за последнюю неделю, месяц и год.MySQL Расчет дат

Это SQL-скрипт (но на языке MySQL). Я занят, поэтому не беспокойтесь о выборе, From и т. Д. Поле datetime_created (в скрипте) уже находится в UnixTime, а временная метка (теперь) используется для расчета текущей даты минус 7 дней. Поскольку результат формулы также может быть отрицательным, мне нужен только результат между 0,01 и 7.

Моя формула на прошлой неделе приведена ниже. Есть идеи?

(registrations.datetime_created -unix_timestamp(now())-604800)/86400 

ответ

0

где положение не было принято на всех, и я должен был измените некоторую логику. Спасибо всем, но окончательный сценарий был приготовлен для всех, и выглядит следующим образом:

registrations.datetime_created > UNIX_TIMESTAMP(ADDDATE(NOW(),INTERVAL -1 WEEK)) 
1

Как насчет использования UNIX_TIMESTAMP/ADDDATE()/между?

Редактировать небольшое расширение, чтобы уточнить

SELECT 
    COUNT(*) 
FROM registrations 
WHERE registrations.datetime_created 
    -- will go back to now() - a month INCLUDING time. -1 WEEK/MONTH/YEAR etc all works here 
    BETWEEN UNIX_TIMESTAMP(ADDDATE(NOW(),INTERVAL -1 WEEK)) 
    AND UNIX_TIMESTAMP(NOW())         
    -- will start at now() including time 

Указав начальную и конечную метку времени в критериях WHERE, MySQL может использовать индекс на datetime_created поле (если таковой имеется), чтобы сделать это очень эффективно. Если вместо этого у вас есть WHERE registrations.datetime_created*1235/12515 (операция в поле) внутри WHERE, вы увидите, что он возвращается медленнее, поскольку MySQL должен будет сканировать всю таблицу, чтобы определить, какие строки возвращаться.

+0

Это позволяет выбирать записи между t oday и 7 дней вперед, а не на прошлой неделе – Christian

+0

Временное braindeath - исправлено :) –

+0

Не работает Я боюсь, что сообщение об ошибке, которое я получил, вообще не поможет. Похоже, это проблема DateAdd. – hermanvn

1

Это не тестировался, но я думаю, что он будет делать то, что вы хотите:

SELECT 
    q1.dealsInLastWeek, 
    q2.dealsInLastMonth, 
    q3.dealsInLastYear 
FROM 
    (SELECT COUNT(*) AS dealsInLastWeek FROM registrations WHERE FROM_UNIXTIME(datetime_created) > DATE_ADD(NOW(), INTERVAL -1 WEEK)) q1, 
    (SELECT COUNT(*) AS dealsInLastMonth FROM registrations WHERE FROM_UNIXTIME(datetime_created) > DATE_ADD(NOW(), INTERVAL -1 MONTH)) q2, 
    (SELECT COUNT(*) AS dealsInLastYear FROM registrations WHERE FROM_UNIXTIME(datetime_created) > DATE_ADD(NOW(), INTERVAL -1 YEAR)) q3 
+0

Привет, Date_Add не принимается как формула. Мне нужно будет изучить это немного больше, как попробовал Interval, но не смог заставить его работать. – hermanvn

+0

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add – Travesty3

+0

Рад, что вы тоже помогли! – hermanvn

0

Тест с ИНТЕРВАЛОМ

SELECT (unix_timestamp(now()-INTERVAL '7' DAY)),(unix_timestamp(now()-INTERVAL '1' MONTH)),(unix_timestamp(now()-INTERVAL '1' YEAR)); 

WHERE registrations.datetime_created>(unix_timestamp(now()-INTERVAL '7' DAY)) 
+0

Вы определенно ставите все на курс! – hermanvn

Смежные вопросы