我现在有一张交易表一张会员信息表,交易表有个字段OrderDate 是交易日期,类型是Date,会员生日字段birthday,类型date
现在我要想办法统计所有会员生日月份前一年的数据的一些信息
比如今天是‘2015-01-10’而会员的生日是 1987-08-19 那么我要看的该柜员 ‘2013-08-01’一直到‘2014-07-31’这段时间内的数据
如果会员的生日是 1月, 比如 ‘1954-01-03’ 那么要看的交易数据的时间段就是 ‘2014-01-01’and'2013-12-31'
------解决思路----------------------
WITH a1 (birthday) AS
(
SELECT '1987-08-19' UNION ALL
SELECT '1954-01-03'
)
,a2 AS
(
SELECT *,
CASE
WHEN datepart(m,birthday)>datepart(m,GETDATE())
THEN CONVERT(CHAR(4),DATEADD(yy,-2,GETDATE()),120)+SUBSTRING(CONVERT(CHAR(10),birthday,120),5,3)+'-01'
ELSE CONVERT(CHAR(4),DATEADD(yy,-1,GETDATE()),120)+SUBSTRING(CONVERT(CHAR(10),birthday,120),5,3)+'-01'
END date_start
FROM a1
)
SELECT *,DATEADD(dd,-1,DATEADD(yy,1,date_start)) date_end
FROM a2
------解决思路----------------------
如果会员的生日是 1月, 比如 '1954-01-03' 那么要看的交易数据的时间段应该是 '2014-01-01'and'2014-12-31'
SELECT T1.*,T2.*
FROM(
SELECT *,DATEADD(YEAR
,DATEDIFF(DAY,birthday,GETDATE())/365
,DATEADD(DAY,1-DAY(birthday),birthday)
) Lastday
FROM 会员信息表) T1
LEFT JOIN 交易表 T2 ON T1.会员ID=T2.会员ID
AND T2.OrderDate>=DATEADD(YEAR,-1,Lastday)
AND T2.OrderDate<Lastday