2017-08-10 131 views
0

這是我的表結構。這是真正的問題,所以不要給予無效。mysql查詢不會返回預期的結果

CREATE TABLE `acd_goals` (
    `goals_id` int(11) NOT NULL AUTO_INCREMENT, 
    `pipeline_id` int(11) NOT NULL, 
    `user_id` int(11) NOT NULL, 
    `goals_month` int(2) NOT NULL, 
    `goals_year` int(4) NOT NULL, 
    `goals_amount` decimal(10,2) NOT NULL, 
    `nos_of_opp` int(11) NOT NULL, 
    `created_by` int(11) NOT NULL, 
    `created_date` datetime NOT NULL, 
    `modified_date` datetime NOT NULL, 
    PRIMARY KEY (`goals_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=508 DEFAULT CHARSET=latin1; 

檢查這個小提琴的數據。 click here

我想要月份當前月份和前2個月的結果,例如:當前月份是Feb-2017,那麼結果將會從Dec-2016Feb-2017

我已經嘗試過下面的查詢,但它不會返回正確的結果給我。

SELECT * FROM `acd_goals` 
where (goals_month >=DATE_FORMAT('2017-06-01','%c') and goals_year = DATE_FORMAT('2017-06-01','%y') or (MONTH(NOW())>= goals_month and goals_year =YEAR(NOW())) and user_id =1) 

我預期的結果是:

goals_id pipeline_id user_id goals_month goals_year goals_amount nos_of_opp created_by created_date modified_date 
410 2 1 6 2017 100 2 1 2017-02-09T19:52:46Z 2017-02-09T19:52:46Z 
411 2 1 7 2017 200 4 1 2017-02-09T19:52:46Z 2017-02-09T19:52:46Z 
412 2 1 8 2017 200 4 1 2017-02-09T19:52:46Z 2017-02-09T19:52:46Z 
+0

如果通過八月期待六月,那麼爲什麼您預期的結果集都二月的數據? –

+0

我想得到當月和前2個月的結果,所以當出現'feb-2017'時,結果會從'dec-2016'到'feb-2017' –

+0

爲什麼是負數?我的問題有什麼問題嗎? –

回答

1

此查詢的一般策略是目標年份和月份轉換爲真正的日期第一使用STR_TO_DATE()

STR_TO_DATE(CONCAT(goals_year, '-', goals_month, '-01'), '%Y-%m-%d') 

然後,保留目標日期在您想要的2個月範圍內的所需行。

SELECT * 
FROM acd_goals 
WHERE 
    STR_TO_DATE(CONCAT(goals_year, '-', goals_month, '-01'), '%Y-%m-%d') >= 
    DATE_SUB(DATE_FORMAT(NOW() ,'%Y-%m-01'), INTERVAL 2 MONTH) AND STR_TO_DATE(CONCAT(goals_year, '-', goals_month, '-01'), '%Y-%m-%d') <= 
DATE_FORMAT(NOW() ,'%Y-%m-01') 
+0

它給我結果上月'12' –

+0

你從來沒有向我們展示任何樣本數據,這是我能做的最好的。看看你是否能讓我的查詢爲你工作。 –

+0

sqlfiddle中有一個示例數據:http://sqlfiddle.com/#!9/e11c15/1,我還在問題中添加了這個小提琴 –

-1

試試看

SELECT * FROM `acd_goals` 
WHERE goals_month BETWEEN 6 AND 8 
+0

今年呢? –

+0

在結尾處添加AND goals_year = 2017年,或者在您寫入時與goals_year = YEAR(NOW()) – Sangsom

+0

仔細閱讀問題 –

-1

試試這個

SELECT * FROM `acd_goals` Where 
    DATE(MAKEDATE(goals_year, 1) + interval (goals_month - 1) month) 
    Between Date(NOW() - interval 2 month - interval day(now()) day) 
    And NOW() 

    AND user_id = 1