情况是这样的
有个表:
1:业务名称(varchar) ; 2:等待时长(int) ;3:办理时长(int); 4:日期(datetime)
表中字段和数据如下
====================================================
业务名称;等待时长;办理时长;日期;
业务A     0         268   2010-09-01  
业务A     240       294   2010-09-01  
业务B     0         326   2010-09-01  
业务B     323       237   2010-09-01  
业务C     0         590   2010-09-01  
业务C     587       204   2010-09-01  
业务A     0         604   2010-09-02  
业务A     601       363   2010-09-02  
业务B     0         1492  2010-09-02  
业务B     1488       300  2010-09-02  
业务C     0         360   2010-09-02  
业务C     951       420   2010-09-02  
业务A     540       120   2010-09-03  
业务A     640       600   2010-09-03  



我想等到每个业务的,每一周的最大等待时长和最大办理时长 ,如何写sql语句???
===================================================================================
参考:
统计每天的每个业务的最大等待时长和最大办理时长的sql语句:
select 
业务名称 ,
max(等待时长) max_waittime ,
max(办理时长) max_worktime ,
时间 
from 表
where 日期 between '2009-9-1' and '2010-9-11 23:59:59' 
group by 日期,业务名称 order by 日期 
 

解决方案 »

  1.   

    select 
    业务名称 ,
    max(等待时长) max_waittime ,
    max(办理时长) max_worktime ,
    时间 
    from 表
    where 日期 between '2009-9-1' and '2010-9-11 23:59:59' 
    group by DATENAME(wk,日期),业务名称 
    order by 日期 
      

  2.   

    更正一下:
    select 
    业务名称 ,
    max(等待时长) max_waittime ,
    max(办理时长) max_worktime ,
    DATENAME(wk,日期) 周数
    from 表
    where 日期 between '2009-9-1' and '2010-9-11 23:59:59' 
    group by DATENAME(wk,日期),业务名称 
    order by 日期 
      

  3.   

    http://topic.csdn.net/t/20051130/11/4428039.html
    请看以上的帖子,希望可以给你帮助
      

  4.   

    select  
      业务名称 ,
      datepart(wk,日期) 周
      max(等待时长) max_waittime ,
      max(办理时长) max_worktime 
    from 表
    where convert(varchar(10),日期,120) between '2009-09-01' and '2010-09-11'  
    group by 业务名称,datepart(wk,日期)
    order by 业务名称 , 周
      

  5.   

     convert(varchar(10),日期,120)
    6楼同志,上面的“120” 是代表什么意思呢?
    ---------------------------------------------
    其实 4楼的chen8410同志,已经基本上差不多了
      

  6.   

    不带世纪数位 (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 
      

  7.   


    就是将时间转成 yyyy-mm-dd 的字符形式,convert是需要资源的,不需要就不用,确实4楼的基本上查不多了,有那么一点点不严谨,严谨的写法:where 日期>='2009-9-1' and 日期<'2010-9-12'4楼的写法会漏掉59.x秒的数据
      

  8.   

    CAST 和 CONVERT (Transact-SQL)
    http://msdn.microsoft.com/zh-cn/library/ms187928%28v=SQL.100%29.aspx
      

  9.   

    SELECT [业务名称],DATEPART(WEEK,[日期]) AS 第几周,MAX([等待时长]) AS 等待时长,MAX([办理时长]) AS 办理时长 FROM 表A GROUP BY [业务名称],DATEPART(WEEK,[日期])----------肯定能满足你
      

  10.   

    select 
    call.oname oname ,
    max(call.waittime) max_waittime ,
    max(call.worktime) max_worktime ,
    DATENAME(wk,call.dd) dddfrom 

    SELECT A.oid oid, 
    A.oname oname,
     A.wname wname ,
    DATEDIFF(minute, A.getdate,A.calldate) waittime ,
    DATEDIFF(minute, A.calldate,A.finishdate) worktime ,
    A.predate dd 
    FROM callinfo A where predate between '2010-9-1' and '2010-9-11 23:59:59') call 
    group by DATENAME(wk,dd),oname order by DATENAME(wk,dd) 
    ----------------------------------------------------------------------
    等待时长通过getdate和calldate的差值得到,
    办理时长通过calldate和finishdate的差值得到;
    功能:统计每个业务的每一周的最大等待时长和最大办理时长;
    原始表中的必需字段要有:oname,getdate,calldate,predate;