求一条不是自然月,按月统计的话语
求一条不是自然月,按月统计的语句
数据库如下:
CREATE TABLE [dbo].[CheJianInfo](
[cjid] [int] IDENTITY(1,1) NOT NULL,
[chehao] [char](20) NULL,
[gwid] [int] NULL,
[chexing] [varchar](50) NULL,
[zhuanchu] [datetime] NULL)
要按【gwid】、【zhuanchu】来统计,本来按自然月的语句已经写好,但现在需求要按上月26日到本月25日算一个月,
需要根据【gwid】和【zhuanchu】分类统计出1月份(去年12月26日到今年1月25日)、2月份。。。12月份,当然,每个月都是上月26日到本月的25日计算的,还有年可以写死,比如今年是2014,明年是2015。感觉不太会,向大家求助,谢谢。
------解决思路----------------------
------解决思路----------------------
试试这个:
------解决思路----------------------
你把#1的结果给出了,哪里有datetime了?
数据库如下:
CREATE TABLE [dbo].[CheJianInfo](
[cjid] [int] IDENTITY(1,1) NOT NULL,
[chehao] [char](20) NULL,
[gwid] [int] NULL,
[chexing] [varchar](50) NULL,
[zhuanchu] [datetime] NULL)
要按【gwid】、【zhuanchu】来统计,本来按自然月的语句已经写好,但现在需求要按上月26日到本月25日算一个月,
需要根据【gwid】和【zhuanchu】分类统计出1月份(去年12月26日到今年1月25日)、2月份。。。12月份,当然,每个月都是上月26日到本月的25日计算的,还有年可以写死,比如今年是2014,明年是2015。感觉不太会,向大家求助,谢谢。
------解决思路----------------------
WITH t AS (
SELECT cjid,chehao,gwid,chexing,
--减25天加1月就重新划分了月份
Month(DateAdd(month,1,DateAdd(day,-25,zhuanchu))) logicMonth
FROM CheJianInfo
-- 年度范围直接用原字段过滤比较快
WHERE zhuanchu >= '2013-12-26'
AND zhuanchu < '2014-12-26'
)
SELECT gwid, logicMonth, Count(*) c
FROM t
GROUP BY gwid, logicMonth
------解决思路----------------------
试试这个:
WITH t AS (
SELECT cjid,chehao,gwid,chexing,
case when datepart(day,zhuanchu)>=26 then dateadd(month,1,zhuanchu)
else zhuanchu
end as logicMonth
FROM CheJianInfo
WHERE zhuanchu >= '2013-12-26'
AND zhuanchu < '2014-12-26'
)
SELECT gwid, convert(varchar(7),logicMonth,120) as logicMonth, Count(*) c
FROM t
GROUP BY gwid, convert(varchar(7),logicMonth,120)
------解决思路----------------------
你把#1的结果给出了,哪里有datetime了?