每天的每个小时有几百条数据存入数据库 表项可以理解为这样 id date hour data
现在需要根据date找出每个小时data的最大值的记录返回
我的想法是子查询找到max的记录然后返回id给上层 但是实在想不出怎么实现
请各位多多指点
14 个解决方案
#1
select * from tab a
where not exists (
select 1 from tab b
where b.[date] = a.[date]
and b.data > a.data
)
where not exists (
select 1 from tab b
where b.[date] = a.[date]
and b.data > a.data
)
#2
select * from tb t
where data=(select max(data) from tb where date=t.date and hour=t.hour
group by date,hour)
where data=(select max(data) from tb where date=t.date and hour=t.hour
group by date,hour)
#3
这样内外层用data匹配的话出来的数据特殊情况下有可能是不严谨的吧
#4
http://bbs.csdn.net/topics/200039629
#5
什么样的特殊情况呢?这是个相关子查询啊
#6
如果这种情况:
同一天 1:00+ 这个小时里面有两个数据 85 55
2:00+这个小时里面有两个数据 55 45
这样的话把1:00+里面那个55的数据也拿出来了吧
#7
怎么会呢,相关子查询,外部查询与内部子查询是有关联条件的,
date=t.date and hour=t.hour
也就是当前时间消失内,只返回一个最大值data的数据,不然写这个关联条件干嘛
#8
我照你的方法做了个实验...结果数据一条都没有过滤掉 跟select * from出的数据一样的...
#9
你好 我看了你的帖子 觉得你写的第一条描述的跟我要的应该是差不多的 但是我找着写了下还是得不到想要的结果 我的想法应该是结果中只有24条数据 每一小时找出一个最大值 但是我想不明白怎么改
SELECT a.* FROM ta a
WHERE NOT EXISTS(SELECT 1 FROM ta WHERE cid=a.cid AND id<a.id)
#10
没有过滤掉任何记录 这是哪里错了
#11
把你写的语句贴出来,是不是表别名t引用错了
#12
select * from tb t
cross apply(select maxdata=max(data) from tb where date=t.date and hour=t.hour)tt
#13
楼上的代码错了,
select *,最大值=max(data) over(partition by date,hour) from tb
#14
select *,maxdata=max(data) over(partition by tb.date,tb.hour) from tb
#1
select * from tab a
where not exists (
select 1 from tab b
where b.[date] = a.[date]
and b.data > a.data
)
where not exists (
select 1 from tab b
where b.[date] = a.[date]
and b.data > a.data
)
#2
select * from tb t
where data=(select max(data) from tb where date=t.date and hour=t.hour
group by date,hour)
where data=(select max(data) from tb where date=t.date and hour=t.hour
group by date,hour)
#3
这样内外层用data匹配的话出来的数据特殊情况下有可能是不严谨的吧
#4
http://bbs.csdn.net/topics/200039629
#5
什么样的特殊情况呢?这是个相关子查询啊
#6
如果这种情况:
同一天 1:00+ 这个小时里面有两个数据 85 55
2:00+这个小时里面有两个数据 55 45
这样的话把1:00+里面那个55的数据也拿出来了吧
#7
怎么会呢,相关子查询,外部查询与内部子查询是有关联条件的,
date=t.date and hour=t.hour
也就是当前时间消失内,只返回一个最大值data的数据,不然写这个关联条件干嘛
#8
我照你的方法做了个实验...结果数据一条都没有过滤掉 跟select * from出的数据一样的...
#9
你好 我看了你的帖子 觉得你写的第一条描述的跟我要的应该是差不多的 但是我找着写了下还是得不到想要的结果 我的想法应该是结果中只有24条数据 每一小时找出一个最大值 但是我想不明白怎么改
SELECT a.* FROM ta a
WHERE NOT EXISTS(SELECT 1 FROM ta WHERE cid=a.cid AND id<a.id)
#10
没有过滤掉任何记录 这是哪里错了
#11
把你写的语句贴出来,是不是表别名t引用错了
#12
select * from tb t
cross apply(select maxdata=max(data) from tb where date=t.date and hour=t.hour)tt
#13
楼上的代码错了,
select *,最大值=max(data) over(partition by date,hour) from tb
#14
select *,maxdata=max(data) over(partition by tb.date,tb.hour) from tb