2012-04-18 111 views
0

我已經用盡了我的搜索尋找這個MySQL日期計算的解決方案。我的客戶想知道過去一週,每月和每年交易的數量。MySQL日期計算

這是一個基於SQL的腳本(但是在MySQL語言中)我很忙,所以不用擔心Select,From等。 datetime_created字段(在腳本中)已經在UnixTime中,而時間戳(現在)用於計算當前日期減去7天。 由於公式結果也可能爲負值,因此我只需要0.01到7之間的結果。

我的過去一週的公式如下所示。有任何想法嗎?

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

回答

0

WHERE子句完全不被接受,我不得不改變了一些邏輯。謝謝大家,但最後的腳本是來自每個人的混合物,並且如下:

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內有WHERE registrations.datetime_created*1235/12515(字段上的操作),那麼您將看到它返回速度較慢,因爲MySQL需要掃描整個表以確定要返回哪些行。

+0

這選擇今天d提前7天,不是過去一週 – Christian 2012-04-18 15:31:40

+0

臨時智力 - 糾正:) – 2012-04-18 15:33:40

+0

不起作用恐怕我收到的錯誤信息根本無法幫助。它似乎是問題的DateAdd函數。 – hermanvn 2012-04-18 15:38:10

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 2012-04-18 15:55:33

+0

http://dev.mysql.com/doc/refman/5.1/zh-TW/date-and-time-functions.html#function_date-add – Travesty3 2012-04-18 15:56:40

+0

您也很高興能夠協助您! – hermanvn 2012-04-19 08:03:11

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 2012-04-19 08:03:30