我希望获得QuestionText
所有被标记为yes
的问题在上个月但在当月没有。
我有两个表 QuestionMaster
QuestionID | QuestionText
其他表格为 ResponsesMaster
ResponseID | ResponseText | QuestionID | ResponseDateTime
响应日期时间在VARCHAR
。
以下查询返回所有响应。我想如上所述。
SELECT QM.QuestionText, AR.AssessmentID, AR.ResponseText
FROM QuestionMaster QM, ResponsesMaster AR
WHERE AR.QuestionID = QM.QuestionID
答案 0 :(得分:1)
SELECT QM.QuestionText,AR.AssessmentID,AR.ResponseText 来自QuestionMaster QM,ResponsesMaster AR 其中AR.QuestionID = QM.QuestionID和月(AR.ResponseDateTime)= MONTH(CURDATE())和QR.QuestionText ='是'和 QR.QuestionID in(SELECT QM.QuestionID 来自QuestionMaster QM,ResponsesMaster AR WHERE AR.QuestionID = QM.QuestionID和Month(AR.ResponseDateTime)= MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH))和QR.QuestionText =' No')
答案 1 :(得分:0)
试试这个。让我知道它是如何工作的。
select qm.QuestionID,qm.QuestionText
from QuestionMaster qm
inner join ResponsesMaster rm on qm.QuestionID = rm.QuestionID and rm.ResponseText = 'N' and month(rm.ResponseDateTime) = month(curdate)
inner join ResponsesMaster rm1 on rm.QuestionID = rm1.QuestionID and rm1.ResponseText = 'Y' and month(rm1.ResponseDateTime) = month(last_day(curdate()) - interval 1 month);
答案 2 :(得分:0)
首先,使用MySQL @变量,它们就像内联编程一样工作。我开始建造当月的第一天是例如:yyyy-mm-01。然后,返回一个月前的第一个月,并转到下个月的第一个月。如果您只使用当前日期,例如NOW 2016-06-06 @ 8:52 am,那么您的上个月是从5月06日上午8:52开始,但我认为您的确是指日历月与文字月份。
现在,我可以将这些变量用于范围标准> = FirstOfLastMonth AND< FirstOfThisMonth将考虑截至本月第一天之前一个月的最后一天晚上11:59:59的所有日期/时间。同样,向前,直到本月最后一天的晚上11:59:59。比如,如果你想比较历史数据,并希望在月初推出像2016-02-01'
现在获取您的数据。使用明确标记为'是'的那些记录开始FIRST。您正在寻找您正在寻找问题文本。如果多次输入,例如不同的人参加测试并且您有多个条目,该怎么办?我只是得到DISTINCT问题ID及其相应的文本。没有任何意义,因为你现在明确地寻找那些回答=' no'他们开始的地方是“是”'
SELECT DISTINCT
QM.QuestionID,
QM.QuestionText
from
( select @FirstOfThisMonth := CONCAT( year(curdate()), '-', month( curdate()), '-01' ),
@FirstOfLastMonth := date_add( @FirstOfThisMonth, interval -1 month ),
@FirstOfNextMonth := date_add( @FirstOfThisMonth, interval +1 month ) ) sqlvars,
ResponsesMaster RM
JOIN QuestionMaster QM
ON RM.QuestionID = QM.QuestionID
JOIN ResponsesMaster RMNow
ON RM.QuestionID = RMNow.QuestionID
AND RMNow.ResponseText = 'no'
AND RMNow.ResponseDateTime >= @FirstOfThisMonth
AND RMNow.ResponseDateTime < @FirstOfNextMonth
where
RM.ResponseText = 'yes'
AND RM.ResponseDateTime >= @FirstOfLastMonth
AND RM.ResponseDateTime < @FirstOfThisMonth