SQL SERVER 报表统计(根据时间)如当天、昨日、本周、上周、本月、上月、同期等时间过滤

SQL语句报表统计个人经验

  1. 统计天数(如:今天、昨天、半个月、半年内等):
    SELECT SUM(数量)
    FROM OrderTable
    WHERE DAY(OrderDate)=DAY(GETDATE()) 
    --注意:这里的OrderDate是你新增单据的时间,这句表示过滤单据日期的天数等于当前系统时间的日期的天数
    --WHERE DATEDIFF(DAY,OrderDate,GETDATE())=0 这个也可以DATEDIFF()函数表示天数的时间差,比上面那句的更好用,如你要昨天或几天前,只要用'<天数'或IN(0,1,2)代替=0,获取需要的天数过滤
    

  2. 统计周次(如:本周、上周、3周前等):
    SELECT SUM(数量)
    FROM OrderTable
    WHERE DATEPART(WEEK, OrderDate)=DATEPART(WEEK, GETDATE())
    --用DATEPART()函数,表示过滤单据日期的周数等于当前系统时间的日期的周数
    --WHERE DATEDIFF(WEEK,OrderDate,GETDATE())=0 ,同理,只要用'<周数'或IN(0,1,2)代替=0,过滤需要的周数

  3. 统计月份(如:本月、上月、3个月份前等):
    SELECT SUM(数量)
    FROM OrderTable
    WHERE DATEPART(MONTH, OrderDate)=DATEPART(MONTH, GETDATE())
    --用DATEPART()函数,表示过滤单据日期的周数等于当前系统时间的日期的月份
    --WHERE DATEDIFF(MONTH,OrderDate,GETDATE())=0 ,同理,只要用'<月数'或IN(0,1,2)代替=0,过滤需要的月份

  4. 统计同期(同期是指去年的这个时间,如:今日同期、本周同期、本月同期等):
    SELECT SUM(数量)
    FROM OrderTable
    WHERE 1=1
    AND YEAR(OrderDate)=YEAR(DATEADD(YEAR,-1,GETDATE()))
    AND MONTH(OrderDate)=MONTH(GETDATE())
    AND DAY(OrderDate)=DAY(GETDATE())
    --DATEADD(YEAR,-1,GETDATE()),表示在当前系统时间下增加-1年时间,即去年,然后根据月份和天数确定去年今日的时间,如2017-12-01的同期为2016-12-01
    --AND YEAR(OrderDate)=YEAR(DATEADD(YEAR,-1,GETDATE()))
    --AND DATEPART(WEEK, OrderDate)=DATEPART(WEEK, GETDATE())这两段表示统计去年本周数量
    --AND YEAR(OrderDate)=YEAR(DATEADD(YEAR,-1,GETDATE()))
    --AND MONTH(OrderDate)=MONTH(GETDATE()) 这两段表示统计去年本月数量

    以上是个人在工作中的经验总结,感谢其他博主的分享,希望对有需要统计数据的猿友有帮助。。。
 
  

你可能感兴趣的:(SQL)