mysql查询不返回预期结果

时间:2017-08-10 05:53:39

标签: 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

3 个答案:

答案 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') 

答案 1 :(得分:-1)

试试

ftp -n<<!
open $1
user $2 $3
binary
cd $4
lcd $ServerPath
prompt
get Monitor_$(date +%Y%m%d).txt
close
bye
!

答案 2 :(得分:-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