有个表 如下
ActionID   Action   UpdateTime
1            A     2008/1/28 21:21:00
2            B     2008/1/28 21:22:00 
3            A     2008/1/28 21:23:00 
4            A     2008/1/28 22:23:00 
5            B     2008/1/28 22:24:00 
我需要一个方法或者一条SQL语句达到以下效果 (按时间分组,取Action=A的Count)ACount   UpdateTime
2             2008/1/28 21:00:00
1             2008/1/28 22:00:00 说白了就是不管DateTime类型中的分和秒的数据来进行分组。精确到小时,按小时分一个组。 谢谢了 ,大家也应该明白了我的意思吧?

解决方案 »

  1.   


    select convert(nvarchar(16),UpdateTime,120) as UpdateTime,count(*) as ACount
    from T
    where [Action]='A'
    group by convert(nvarchar(16),UpdateTime,120)
      

  2.   


    create table T(
    ActionID int,
    [Action] nvarchar(10),
    UpdateTime datetime
    )
    insert T select 1,                         'A',           '2008-01-28 21:21:00' 
    insert T select 2,                         'B',           '2008-01-28 21:22:00'   
    insert T select 3,                         'A',           '2008-01-28 21:23:00'   
    insert T select 4,                         'A',           '2008-01-28 22:23:00'   
    insert T select 5,                         'B',           '2008-01-28 22:24:00'  select convert(nvarchar(13),UpdateTime,120) as UpdateTime,count(*) as ACount
    from T
    where [Action]='A'
    group by convert(nvarchar(13),UpdateTime,120)
      

  3.   


    --result
    UpdateTime    ACount
    ------------- -----------
    2008-01-28 21 2
    2008-01-28 22 1(2 行受影响)
      

  4.   

    在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。不带世纪数位 (yy) 带世纪数位 (yyyy) 
    标准 
    输入/输出** 
    - 0 或 100 (*)  默认值 mon dd yyyy hh:miAM(或 PM) 
    1 101 美国 mm/dd/yyyy 
    2 102 ANSI yy.mm.dd 
    3 103 英国/法国 dd/mm/yy 
    4 104 德国 dd.mm.yy 
    5 105 意大利 dd-mm-yy 
    6 106 - dd mon yy 
    7 107 - mon dd, yy 
    8 108 - hh:mm:ss 
    - 9 或 109 (*)  默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM) 
    10 110 美国 mm-dd-yy 
    11 111 日本 yy/mm/dd 
    12 112 ISO yymmdd 
    - 13 或 113 (*)  欧洲默认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h) 
    14 114 - hh:mi:ss:mmm(24h) 
    - 20 或 120 (*)  ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff] 
    - 21 或 121 (*)  ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff] 
    - 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格) 
    - 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM 
    - 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM 
      

  5.   

    1 101 美国 mm/dd/yyyy 
    2 102 ANSI yy.mm.dd 
    3 103 英国/法国 dd/mm/yy 
    4 104 德国 dd.mm.yy 
    5 105 意大利 dd-mm-yy 
    6 106 - dd mon yy 
    7 107 - mon dd, yy 
    8 108 - hh:mm:ss 
    - 9 或 109 (*)  默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM) 
    10 110 美国 mm-dd-yy 
    11 111 日本 yy/mm/dd 
    12 112 ISO yymmdd 
    - 13 或 113 (*)  欧洲默认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h) 
    14 114 - hh:mi:ss:mmm(24h) 
    - 20 或 120 (*)  ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff] 
    - 21 或 121 (*)  ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff] 
    - 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格) 
    - 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM 
    - 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM 
      

  6.   


    declare @T table (
    ActionID int,
    [Action] nvarchar(10),
    UpdateTime datetime
    )
    insert @T select 1,                         'A',           '2008-01-28 21:21:00' 
    insert @T select 2,                         'B',           '2008-01-28 21:22:00'   
    insert @T select 3,                         'A',           '2008-01-28 21:23:00'   
    insert @T select 4,                         'A',           '2008-01-28 22:23:00'   
    insert @T select 5,                         'B',           '2008-01-28 22:24:00'  select
    convert(varchar(10),UpdateTime,21) as 日期,
    datepart(hh,UpdateTime) as 小时,--加多一列显示小时
    [Action] ,
    count(*) as 记录
    from 
    @T
    where
    [Action]='A'
    group by [Action],convert(varchar(10),UpdateTime,21),datepart(hh,UpdateTime)
    日期         小时          Action     记录          
    ---------- ----------- ---------- ----------- 
    2008-01-28 21          A          2
    2008-01-28 22          A          1(所影响的行数为 2 行)