2014-10-20 41 views
0

我需要你的幫助。 我想要實現的是以下幾點:MySQL Query自定義日期時間

獲取過去一週中每天的提款和存款利潤。

所以我希望得到的行值:日,存款利潤,提取利潤。 然而,一天是一個自定義的日子,意思是:一天在yyyy-mm-dd 13:00:00和yyyy-mm-dd 13:00:00之間。所以按日期分組是不夠的。

我試着嘗試的查詢是:

SELECT submit_date, 
MAX(deposit_amount) - MIN(deposit_amount) AS deposit, 
SUM(withdrawal_amount * withdrawal_percentage) as withdrawal 
FROM `pro_Profits` 
WHERE account_id = '{C795E1D2-452A-DEE8-A800-02E94332114A}' 
AND submit_datetime >= NOW() - INTERVAL 1 WEEK 
GROUP BY submit_date 
ORDER BY `submit_datetime` DESC 

表:

CREATE TABLE IF NOT EXISTS `pro_Profits` (
    `id` varchar(512) NOT NULL, 
    `account_id` varchar(512) NOT NULL, 
    `submit_date` date NOT NULL, 
    `submit_time` time NOT NULL, 
    `submit_datetime` datetime NOT NULL, 
    `deposit_amount` bigint(20) NOT NULL, 
    `withdrawal_amount` bigint(20) NOT NULL, 
    `deposit_percentage` double NOT NULL DEFAULT '1', 
    `withdrawal_percentage` double NOT NULL DEFAULT '0.4', 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`), 
    KEY `id_2` (`id`), 
    KEY `account_id` (`account_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
+0

您是否試過通過php來定義它?日期函數? – 2014-10-20 13:07:10

+0

不是真的,因爲它應該可能只使用SQL我想。所以我想在使用代碼解決它之前知道可能性。 – larssy1 2014-10-20 13:08:40

回答

0

什麼你基本上需要做的是經13小時轉移的一天。你可以在MySQL中使用函數此:

TIMESTAMPDIFF(HOUR,13,submit_date) 

在您的SQL查詢,這將是這個樣子:

SELECT 
    TIMESTAMPDIFF(HOUR,13,submit_date) as shifted_submit_date, 
    MAX(deposit_amount)-MIN(deposit_amount) AS deposit, 
    SUM(withdrawal_amount*withdrawal_percentage) as withdrawal 
FROM 
    pro_Profits 
WHERE 
    account_id = '{C795E1D2-452A-DEE8-A800-02E94332114A}' AND 
    submit_datetime >= NOW()-INTERVAL 1 WEEK 
GROUP BY 
    shifted_submit_date 
ORDER BY 
    submit_datetime DESC 

可能需要試驗的一點得到正是你想要的。我感到很奇怪,你將一個事物分組,然後再由另一個事物分組。

+0

它是測試過程的一部分:P就像這個查詢返回的值爲shifted_submit_date :) THx無論如何,生病試圖找出一些東西。 – larssy1 2014-10-20 13:21:17

+0

我希望它能夠工作,但讓我們知道你想出了什麼。 – 2014-10-20 13:27:19

0

你可以嘗試這樣的事情:

SELECT 
    FLOOR(TIME_TO_SEC(TIMEDIFF(DATE_ADD(Date(NOW()), INTERVAL 13 Hour),submit_datetime))/86400.00) as Diff, 
    MAX(deposit_amount)-MIN(deposit_amount) AS deposit, 
    SUM(withdrawal_amount*withdrawal_percentage) as withdrawal 
    FROM 
     pro_Profits 
    WHERE account_id='{C795E1D2-452A-DEE8-A800-02E94332114A}' 
    and submit_datetime >= DATE_ADD(Date(NOW()), INTERVAL 13 Hour)-INTERVAL 1 WEEK 
    GROUP BY 
     Diff 
    ORDER BY 
     Diff 
  • DATE_ADD(日期(NOW()),間隔13小時:你想從今天開始13:00和回去1周
  • TIME_TO_SEC(TIMEDIFF(DATE_ADD(Date(NOW()),INTERVAL 13 Hour),submit_datetime))/ 86400.00:計算我們的日期和'submit_datetime'之間的差值秒數
  • FLOOR(...):我們得到上創造我們的日子「桶」的差異。

注意:「桶」的數量實際上是8,如果您在13:00之後投出查詢的那一天有提交,也可以找到「-1」。您可以輕鬆編輯上述查詢以刪除這些結果。