请教大神们一个SQL语句

人称猪 2012-04-18 03:25:01
数据表中现有字段:

机器号 开始时间 班次 开机时间总和 关机时间总和
801 2012-2-13 18:30:00 甲 5.2 0.3

801 2012-2-14 0:00:03 甲 6.2 0.3

801 2012-2-14 6:30:05 乙 11.6 0.4

801 2012-2-14 18:30:01 甲 5.2 0.3

801 2012-2-15 0:00:03 甲 6.3 0.2

801 2012-2-15 6:30:05 乙 11.6 0.4

801 2012-2-15 18:30:01 甲 6.2 0.3

801 2012-2-16 0:00:03 甲 6.1 0.4

说明:因为数据库中是按照以“天”和“班次”来记录每条记录的,在每次换班和到凌晨0点左右的时候重新产生一条数据。所以每天会有三条记录。
现在我想在查询过程中把以“天”为条件记录去掉,查询出来的结果是只按照班次来分,每天只要两条记录,这两条记录是夸天的。

机器号 开始时间 班次 开机时间总和 关机时间总和
801 2012-2-13 18:30:00 甲 11.4 0.6

801 2012-2-14 6:30:05 乙 11.6 0.4

801 2012-2-14 18:30:01 甲 11.5 0.5

801 2012-2-15 6:30:05 乙 11.6 0.4

801 2012-2-15 18:30:01 甲 12.3 0.7


请教这条SQL语句怎么写

...全文
172 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
学习中------- 2012-04-18
  • 打赏
  • 举报
回复
取下巧

IF NOT OBJECT_ID('tb') IS NULL
DROP TABLE tb
create table tb(a1 int,a2 datetime,a3 varchar(50),a4 float,a5 float)
insert into tb select 801 ,'2012-2-13 18:30:00','甲',5.2 ,0.3
insert into tb select 801 ,'2012-2-14 0:00:03','甲',6.2 ,0.3
insert into tb select 801 ,'2012-2-14 6:30:05','乙', 11.6, 0.4
insert into tb select 801 ,'2012-2-14 18:30:01','甲', 5.2, 0.3
insert into tb select 801 ,'2012-2-15 0:00:03','甲', 6.3 ,0.2
insert into tb select 801 ,'2012-2-15 6:30:05','乙', 11.6 ,0.4
insert into tb select 801 ,'2012-2-15 18:30:01','甲', 6.2, 0.3
insert into tb select 801 ,'2012-2-16 0:00:03','甲', 6.1 ,0.4

with a as(
select a1,a2,a3 ,a4,a5 from tb)
, b as (
select a1,case when datepart(hour,a2)=0 then dateadd(mi,30,dateadd(hour,18,dateadd(dd,-1,a2))) else a2 end a2,a3,a4,a5 from a )
, c as (
select a2,dense_rank()over(order by dateadd(ss,-datepart(ss,a2),a2))na from b )
,d as(
select a1,dateadd(ss,-datepart(ss,a2),a2)a2,a3,sum(a4)a4,sum(a5)a5,dense_rank()over(order by dateadd(ss,-datepart(ss,a2),a2))na
from b group by a1,dateadd(ss,-datepart(ss,a2),a2),a3)
select d.a1,cc.a2,d.a3,d.a4,d.a5 from d left join (select min(a2)a2,na from c group by na)cc on cc.na=d.na

a1 a2 a3 a4 a5
----------- ----------------------- -------------------------------------------------- ---------------------- ----------------------
801 2012-02-13 18:30:00.000 甲 11.4 0.6
801 2012-02-14 06:30:05.000 乙 11.6 0.4
801 2012-02-14 18:30:01.000 甲 11.5 0.5
801 2012-02-15 06:30:05.000 乙 11.6 0.4
801 2012-02-15 18:30:01.000 甲 12.3 0.7
人称猪 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
参考


SQL code

with TT
as(
select ROW_NUMBER() over( order by getdate()) as no,*
from TB )

select A.*
from TT A
where no in (select max(no) as no from TT
where A.班次 =……
[/Quote]
谢谢大神指导,但是好像不是我要的结果,

/*
1 801 2012-02-13 18:30:00.000 甲 5.2 0.3
3 801 2012-02-14 06:30:05.000 乙 11.6 0.4
4 801 2012-02-14 18:30:01.000 甲 5.2 0.3
6 801 2012-02-15 06:30:05.000 乙 11.6 0.4
7 801 2012-02-15 18:30:01.000 甲 6.2 0.3
8 801 2012-02-16 00:00:03.000 甲 6.1 0.4*/

这个结果中和一楼一样只是把每天0点左右的记录去掉了,但是我希望把您删掉的记录加在前一条记录上,因为这两条记录是一个班次的。
我们应该有个常识就是上夜班的分上半夜和下半夜,您查询的结果只记录了甲班的上半夜的时间,而下半夜因为是从0点开始重新记录的数据而被过滤掉了。
Mr_Nice 2012-04-18
  • 打赏
  • 举报
回复
参考

 with TT
as(
select ROW_NUMBER() over( order by getdate()) as no,*
from TB )

select A.*
from TT A
where no in (select max(no) as no from TT
where A.班次 = 班次
and A.机器号=机器号
group by convert(varchar(10),开始时间,120) ,班次)


/*
1 801 2012-02-13 18:30:00.000 甲 5.2 0.3
3 801 2012-02-14 06:30:05.000 乙 11.6 0.4
4 801 2012-02-14 18:30:01.000 甲 5.2 0.3
6 801 2012-02-15 06:30:05.000 乙 11.6 0.4
7 801 2012-02-15 18:30:01.000 甲 6.2 0.3
8 801 2012-02-16 00:00:03.000 甲 6.1 0.4*/
Vidor 2012-04-18
  • 打赏
  • 举报
回复
group by 开始时间-30分钟
select 机器号, min(开始时间), 班次, sum(开机时间总和), sum(开机时间总和)
from tb group by 机器号, convert(varchar,dateadd(minute,-30,开始时间),112), 班次
order by 1,2
人称猪 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
SQL code


SELECT * FROM 表名 WHERE CAST(SUBSTRING(CONVERT(CHAR(8),开始时间,108),1,2) AS INT) > 0
/**
机器号 开始时间 班次 开机时间总和 关机时间总和
________________________________________________________……
[/Quote]
你这个写法只是把0点这个时间的记录过滤掉,我要的结果是把零点这条记录加到前一条记录之上。
Me_zzx 2012-04-18
  • 打赏
  • 举报
回复

SELECT * FROM 表名 WHERE CAST(SUBSTRING(CONVERT(CHAR(8),开始时间,108),1,2) AS INT) > 0
/**
机器号 开始时间 班次 开机时间总和 关机时间总和
______________________________________________________________
801 2012-02-13 18:30:00.000 甲 5.2 0.3
801 2012-02-14 18:30:01.000 甲 5.2 0.3
801 2012-02-14 06:30:05.000 乙 11.6 0.4
801 2012-02-15 18:30:01.000 甲 6.2 0.3
801 2012-02-15 06:30:05.000 乙 11.6 0.4
**/

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧