Inspect_name           vtime         时间
王                      a           2010-1-17 15:30 
张                      a           2010-1-17 15:30
张                      a           2010-1-18  4:30
张                      a           2010-1-30  4:30
Inspect_name=姓名
vdatetime2=录入时间
select Inspect_name, 
检查次数=sum(case when 数量>119 then 1 else 0 end),
双休日=sum(case when 双休日>119 then 1 else 0 end)
from (select Inspect_name, vdatetime2,
数量= sum(vtime),
SUM(CASE WHEN xxx = '休' THEN vtime ELSE 0 END) AS 双休日 
from (select Inspect_name, rank,vdatetime1,uplj,
(case when convert(varchar(16),vdatetime2,120) between convert(varchar(10),vdatetime2,120)+' 00:00' and convert(varchar(10),vdatetime2,120)+' 05:01' then convert(varchar(10),vdatetime2 -1,120)
else convert(varchar(10),vdatetime2,120) end) as vdatetime2,
( CASE WHEN(datepart(dw, vdatetime2)>=6 AND CONVERT(VARCHAR(8),vdatetime2,108)>'23:00') OR (datepart(dw, vdatetime2)=7 )or (datepart(dw, vdatetime2)=1 ) OR(datepart(dw, vdatetime2)=2 AND CONVERT(VARCHAR(8),vdatetime2,108)<'04:59')THEN '休' ELSE '不休' END) as 'xxx',vtime 
from jcxs ) t group by  Inspect_name, vdatetime2) Tbl group by Inspect_name

这条sql可以查出  以每天早5点到第二天5点进行统计列出如: Inspect_name     检查次数       双休日
          王                 1             1
          张                 3             3
我想列出:
         Inspect_name     检查次数       双休日
          王                 1             1
          张                 3             2
也就是说遇见每周的双休日只记录一次,而不是周六一次周日一次,我要每周就一次

解决方案 »

  1.   

    http://topic.csdn.net/u/20100125/22/2f1f4b45-9303-43ac-8bc8-6b8c09712966.html?24430
    请注意如果是我冤枉你 ,说声对不起
      

  2.   

    你的表结构是什么?为什么总是不肯贴出你的 create table 语句和 insert 语句?
      

  3.   

      表    :姓名       检查时间            检查时长        关键点 
                        王     2010-01-22 22:50       120          C 
                     王      2010-01-24 6:50        120          C 
                     王      2010-01-26 9:50         50               
                     王      2010-01-26 15:5         70  
                     王      2010-01-25 21:00       120          C 
                     王      2010-01-26 1:00         20          C 
                     王      2010-01-27 1:00         100         C 昼查,时间段5点-21点,一天计算一次,时长要超过120,前夜时段21点-0点、后夜0-5点时长要超过120 
    一天计算一次,双休日时段周5的21点到周1的5点时长要超过240一周计算一次。 
    按照时间为,如周二的5:01到周三的5:00算一天计算一次。如果周三的3点就算做是周二的后夜及夜间 
    我要列出: 姓名  昼查  夜间 前夜  后夜 双休日  夜间A类        关键点 
    王      2    3    2    1    1        4           5  这就是我要的结果老师
      

  4.   

       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
      

  5.   

    结帐吧。 如果你不知道怎么弄,看贴子会不会? 看一下 #13楼 让你看的贴子。> select * from C30018291
    2> go
    Inspect_name|vtime|时间
    ------------|-----|--------------------
    王           |a    | 2010-01-17 15:30:00
    张           |a    | 2010-01-17 15:30:00
    张           |a    | 2010-01-18 04:30:00
    张           |a    | 2010-01-30 04:30:00(4 rows affected)
    1> select Inspect_name,count(*) as 检查次数,
    2> count(distinct case DATEpart(dw,时间)
    3>      when 1 then convert(varchar,时间-1,112)
    4>      when 7 then convert(varchar,时间,112)
    5>      else null
    6>      end)  as 双休日
    7> from C30018291
    8> group by Inspect_name
    9> go
    Inspect_name|检查次数       |双休日
    ------------|-----------|-----------
    王           |          1|          1
    张           |          3|          2
    1>
      

  6.   

    老师sql能不能设置上限呀?比如周末次数不能超过10
      

  7.   

    给出你的测试用例。否则估计我自说自话做出来也不是你想要的,何必浪费你我时间呢?
    并且上面的SQL语句已经达到你的要求了。学会提问。
    问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧 (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  8.   


    CREATE TABLE #(
    Inspect_name varchar(10),[time] datetime
    )
    INSERT INTO #
     
    SELECT '王','2010-1-17 15:30' UNION ALL
    SELECT '张','2010-1-17 15:30' UNION ALL
    SELECT '张','2010-1-18  4:30' UNION ALL
    SELECT '张','2010-1-30  4:30' SET datefirst 1SELECT * 
    FROM (
    SELECT 
    Inspect_name,COUNT(1)'检查次数',
    SUM(CASE WHEN DATEPART(weekday,[time]) in (6,7) THEN 1 ELSE 0 END)'双休日'
    FROM #
    GROUP BY Inspect_name
    )A 
    WHERE 双休日<10SET datefirst 7
      

  9.   

    老师我的双休日时间段是周五的21点到周一的5点哦。您给的SQL还不完整哦