首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按单个月和计数对最后3个月的数据进行SQL查询

按单个月和计数对最后3个月的数据进行SQL查询
EN

Stack Overflow用户
提问于 2016-02-09 08:37:50
回答 2查看 1.7K关注 0票数 0

我有一个数据库已经发出了电子邮件。列是SendDateMailFrom。每发一封电子邮件都是记录。

我想提出一份报告,显示在过去3个月中,有多少电子邮件是按月份和地址分类的:

代码语言:javascript
复制
From Adresss        Nov 2015    Dec 2015  Jan 2016

clienta@mailer.com    36         28         14
clientb@mailer.com    13         6          8

样本数据只需:

代码语言:javascript
复制
FromAdresss              SendDate
clienta@mailer.com        25/11/15
clientb@mailer.com        20/12/15
clientb@mailer.com        21/11/15

我尝试过各种分组和计数方法,但无法创建动态标题和它们下面的计数。

任何帮助都将不胜感激。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-09 08:55:07

代码语言:javascript
复制
SELECT FromAddress,
       SUM( CASE WHEN MONTH(SendDate) = 11 AND YEAR(SendDate) = 2015 THEN 1 ELSE 0 END ) AS Nov2015,
       SUM( CASE WHEN MONTH(SendDate) = 12 AND YEAR(SendDate) = 2015 THEN 1 ELSE 0 END ) AS Dec2015,
       SUM( CASE WHEN MONTH(SendDate) = 1 AND YEAR(SendDate) = 2016 THEN 1 ELSE 0 END ) AS Jan2016
FROM tableName
GROUP BY FromAddress

我在Server中使用了月份()和年份()函数从SendDate列中提取月份和年份。您可以使用在上述查询中使用的DBMS中提供的各个函数。

要使其动态,可以使用DATEDIFF()函数,如下所示

代码语言:javascript
复制
SELECT FromAddress,
       SUM( CASE WHEN DATEDIFF(MONTH,SendDate,GETDATE()) = 3 THEN 1 ELSE 0 END ) ,
       SUM( CASE WHEN DATEDIFF(MONTH,SendDate,GETDATE()) = 2 THEN 1 ELSE 0 END ) ,
       SUM( CASE WHEN DATEDIFF(MONTH,SendDate,GETDATE()) = 1 THEN 1 ELSE 0 END )
FROM tableName
GROUP BY FromAddress
票数 1
EN

Stack Overflow用户

发布于 2016-02-09 12:56:48

代码语言:javascript
复制
SELECT 
    COUNT(FromAddress) AS RecordCount,
    DATEPART(MM, CONVERT(DATETIME, SUBSTRING(SendDate, 7, 2) + SUBSTRING(SendDate, 4, 2) + SUBSTRING(SendDate, 1, 2), 101)) AS 'MONTH',
    DATEPART(YY, CONVERT(DATETIME, SUBSTRING(SendDate, 7, 2) + SUBSTRING(SendDate, 4, 2) + SUBSTRING(SendDate, 1, 2), 101)) AS 'YEAR'
FROM tableName
GROUP BY 
    DATEPART(MM, CONVERT(DATETIME, SUBSTRING(SendDate, 7, 2) + SUBSTRING(SendDate, 4, 2) + SUBSTRING(SendDate, 1, 2), 101)),
    DATEPART(YY, CONVERT(DATETIME, SUBSTRING(SendDate, 7, 2) + SUBSTRING(SendDate, 4, 2) + SUBSTRING(SendDate, 1, 2), 101))

如前所述,但由于您的日期不是标准SQL,所以您必须在它们周围做一些额外的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35287311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档