zoukankan      html  css  js  c++  java
  • sql server 按年月日分组

    sql server  按年月日分组

    -----------------------------------------------
    --author:yangjinwang
    --date:2017-03-30
    --do:根据活动查询 每个奖品类的发放数量
    -----------------------------------------------
    create proc GetWinningInfoTypeCountByTimeActivity
    @CreateTimeStart datetime =null,  --开始时间
    @CreateTimeEnd datetime =null,  --结束时间
    @TimeType varchar(20)='m',   --查询维度,年月日
    @ActivityId int=null         --活动ID
    as
    begin
        if(@TimeType='y')
            begin
                select  
                c.id as '活动ID',
                c.Name  as '活动名称',
                cast(datepart(YEAR,a.CreateTime) as varchar(4))   as  '日期',
                b.Title as  '奖品类别'
                ,COUNT(a.Id) as '中奖数量'
                from  WinningInfo  a 
                left join PrizesInfo b on a.PrizesId=b.Id
                left join ActivityInfo  c on b.ActivityId=c.Id
                where  a.ActivityId=@ActivityId
                and (a.CreateTime>=@CreateTimeStart or @CreateTimeStart is null)
                and (a.CreateTime<=@CreateTimeEnd or @CreateTimeEnd is null)
                 group by c.id,c.Name  ,  
                cast(datepart(YEAR,a.CreateTime) as varchar(4)) ,
                b.Title
                order by 日期
            end
            else if(@TimeType='m')
                begin
                    select  
                    c.id as '活动ID',
                    c.Name  as '活动名称',
                    cast(datepart(YEAR,a.CreateTime) as varchar(4))+'-'+RIGHT('00'+CAST(MONTH(a.CreateTime) AS VARCHAR(2)),2)     as  '日期',
                    b.Title as  '奖品类别'
                    ,COUNT(a.Id) as '中奖数量'
                    from  WinningInfo  a 
                    left join PrizesInfo b on a.PrizesId=b.Id
                    left join ActivityInfo  c on b.ActivityId=c.Id
                    where  a.ActivityId=@ActivityId
                    and (a.CreateTime>=@CreateTimeStart or @CreateTimeStart is null)
                    and (a.CreateTime<=@CreateTimeEnd or @CreateTimeEnd is null)
                     group by c.id,c.Name  ,  
                    cast(datepart(YEAR,a.CreateTime) as varchar(4))+'-'+RIGHT('00'+CAST(MONTH(a.CreateTime) AS VARCHAR(2)),2)  ,
                    b.Title
                    order by 日期    
                end
            else
                begin
                        select  
                    c.id as '活动ID',
                    c.Name  as '活动名称',
                    cast(datepart(YEAR,a.CreateTime) as varchar(4))+'-'+RIGHT('00'+CAST(MONTH(a.CreateTime) AS VARCHAR(2)),2)+'-'+RIGHT('00'+CAST(day(a.CreateTime) AS VARCHAR(2)),2)     as  '日期',
                    b.Title as  '奖品类别'
                    ,COUNT(a.Id) as '中奖数量'
                    from  WinningInfo  a 
                    left join PrizesInfo b on a.PrizesId=b.Id
                    left join ActivityInfo  c on b.ActivityId=c.Id
                    where  a.ActivityId=@ActivityId
                    and (a.CreateTime>=@CreateTimeStart or @CreateTimeStart is null)
                    and (a.CreateTime<=@CreateTimeEnd or @CreateTimeEnd is null)
                     group by c.id,c.Name  ,  
                    cast(datepart(YEAR,a.CreateTime) as varchar(4))+'-'+RIGHT('00'+CAST(MONTH(a.CreateTime) AS VARCHAR(2)),2)+'-'+RIGHT('00'+CAST(day(a.CreateTime) AS VARCHAR(2)),2)   ,
                    b.Title
                    order by 日期    
                end    
    end

     年,月,日,季,旬

    --还可以这样
    --
    select datepart(YEAR,getdate())
    select datepart(yyyy,getdate())
    select datepart(yy,getdate())
    --
    select datepart(MONTH,getdate())
    select datepart(mm,getdate())
    select datepart(m,getdate())
    --
    select datepart(dd,getdate())
    --1年中的第多少天
    select datepart(dy,getdate())
    --季度
    select datepart(qq,getdate())
    
    select datepart(qq,'2017-07-01')
    --1年中的第多少周
    select datepart(wk,getdate())
    --星期 --因为从周日算第一天的,星期4,计算结果是5
    select datepart(dw,getdate())-1
    
    
    SELECT CONVERT(VARCHAR(10),GETDATE(),120)  --2015-07-13
    SELECT CONVERT(VARCHAR(10),GETDATE(),101)  --07/13/2015
    
    
    --按日分组:
    select convert(nvarchar(10),GETDATE(),120)
    --按年月分组:
    select  cast(datepart(YEAR,GETDATE()) as varchar(4))+'-'+RIGHT('00'+CAST(MONTH(GETDATE()) AS VARCHAR(2)),2) 
    --按年分组
    select DATEPART(year,GETDATE())
    
    
    --按旬分组
     select case (datepart(day,GETDATE())-1)/10 when 0 then '上旬' when 1 then '中旬' else '下旬' end as 旬,
     sum(1) as 统计 
     from 表A group by 
     case (datepart(day,dt)-1)/10 when 0 then '上旬' when 1 then '中旬' else '下旬' end 
      
    ------------------------------------------------------------------------------------
    
     

     另一种Convert 年月日分组方式

    --按日
    select convert(nvarchar(10),GETDATE(),120)
    --按月
    select convert(nvarchar(7),GETDATE(),120)
    --按年
    select convert(nvarchar(4),GETDATE(),120)
  • 相关阅读:
    分布式id生成
    DB主从一致性架构优化4种方法
    Mysql在大型网站的应用架构演变
    win10下iis绑定局域网ip无效的解决方案
    css随笔
    html标签说明
    C# JSON序列化日期格式问题
    使用事件机制相比直接调用函数的优势
    C#绑定事件时使用匿名函数
    C# t4模版引擎笔记 引入外部dll
  • 原文地址:https://www.cnblogs.com/yangjinwang/p/6648408.html
Copyright © 2011-2022 走看看