按季度从数据库中检索数据但是它应该仅基于当前年度数据

时间:2013-06-22 09:55:46

标签: mysql

我试过这段代码:

它的工作也很好,但问题是,如果当前月份是feb并触发此查询,那么它会考虑从现在开始的3个月,因此从过去的一年开始,即2012年11月或者说dec我只想要当前的年度数据,如果它现在是feb,我发出这个查询然后它应该只显示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;

2 个答案:

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

答案 1 :(得分:0)

在查询中使用此功能按年查找记录过滤器

 YEAR( '20013-12-12' )

例如,

SELECT * FROM TABLE WHERE YEAR(DATE_FIELD) = 2013