这是我的桌子结构。这是一个真正的问题,所以不要提供帮助。
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-2016
到Feb-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 :(得分: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