0

我试过这段代码:

它的工作也很好,但问题是,如果当前月份是 2 月并触发此查询,那么它会考虑从现在起过去 3 个月,因此从过去一年开始,即 2012 年 11 月或 12 月说我只想要当年的数据,如果它是 2 月现在,我触发了这个查询,那么它应该只显示 jan 和 feb 记录。

   SELECT CROEmailId, 
(
SELECT COUNT(LeadId) 
FROM LeadStatus 
WHERE DATE(`LeadTime`)> DATE_SUB(now(), 
INTERVAL 3 MONTH
) 
AND Generated=1 and AssignedTo=a.CROEmailId) 
AS 'NEW LEAD',(
SELECT COUNT(LeadId) 
FROM LeadHistory 
WHERE DATE(UpdatedAt)> DATE_SUB(now(), 
INTERVAL 3 MONTH
) AND AssignedTo=a.CROEmailId) 
AS 'Lead Updated',
(
SELECT SUM(TotalEmails)
FROM MailJobs 
WHERE DATE(CompletedAt)> DATE_SUB(now(), 
INTERVAL 3 MONTH
) 
AND MailFrom=a.CROEmailId) 
AS 'Email Uploaded',
(
SELECT SUM(TotalSent) 
FROM MailJobs 
WHERE DATE(CompletedAt)> DATE_SUB(now(), 
INTERVAL 3 MONTH) 
AND MailFrom=a.CROEmailId
) 
AS 'Email Sent',
(
SELECT SUM(NetTotal) 
FROM Invoice 
WHERE Status='PAID' 
AND DATE(CreatedAt)> DATE_SUB(now(), INTERVAL 3 MONTH) 
AND CROEmailId=a.CROEmailId) 
AS 'Payment Today' FROM CustomersManager a;
4

2 回答 2

1

尝试改变

DATE_SUB(now(), INTERVAL 3 MONTH)

IF(MONTH(CURDATE()) < 4, DATE_FORMAT(CURDATE(), '%Y-01-01'), CURDATE() - INTERVAL 3 MONTH)

在所有子查询中。

SELECT CROEmailId, 
       (SELECT COUNT(LeadId) 
          FROM LeadStatus 
         WHERE DATE(`LeadTime`)> IF(MONTH(CURDATE()) < 4, DATE_FORMAT(CURDATE(), '%Y-01-01'), CURDATE() - INTERVAL 3 MONTH) 
           AND Generated=1 
           AND AssignedTo=a.CROEmailId) AS 'NEW LEAD',
       (SELECT COUNT(LeadId) 
          FROM LeadHistory 
         WHERE DATE(UpdatedAt)> IF(MONTH(CURDATE()) < 4, DATE_FORMAT(CURDATE(), '%Y-01-01'), CURDATE() - INTERVAL 3 MONTH) 
           AND AssignedTo=a.CROEmailId) AS 'Lead Updated',
       (SELECT SUM(TotalEmails)
          from MailJobs 
         WHERE DATE(CompletedAt)> IF(MONTH(CURDATE()) < 4, DATE_FORMAT(CURDATE(), '%Y-01-01'), CURDATE() - INTERVAL 3 MONTH) 
           AND MailFrom=a.CROEmailId) AS 'Email Uploaded',
       (SELECT SUM(TotalSent) 
          FROM MailJobs 
         WHERE DATE(CompletedAt)> IF(MONTH(CURDATE()) < 4, DATE_FORMAT(CURDATE(), '%Y-01-01'), CURDATE() - INTERVAL 3 MONTH) 
           AND MailFrom=a.CROEmailId) AS 'Email Sent',
       (SELECT SUM(NetTotal) 
          FROM Invoice 
         WHERE Status='PAID' 
           AND DATE(CreatedAt)> IF(MONTH(CURDATE()) < 4, DATE_FORMAT(CURDATE(), '%Y-01-01'), CURDATE() - INTERVAL 3 MONTH) 
           AND CROEmailId=a.CROEmailId) AS 'Payment Today' 
  FROM CustomersManager a;
于 2013-06-22T10:09:21.073 回答
0

在您的查询中使用它来按年份查找记录过滤器

 YEAR( '20013-12-12' )

例子,

SELECT * FROM TABLE WHERE YEAR(DATE_FIELD) = 2013
于 2013-06-22T10:02:01.050 回答