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
也就是说遇见每周的双休日只记录一次,而不是周六一次周日一次,我要每周就一次
王 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
也就是说遇见每周的双休日只记录一次,而不是周六一次周日一次,我要每周就一次
请注意如果是我冤枉你 ,说声对不起
王 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 这就是我要的结果老师
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>
并且上面的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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
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