分组查询后,结果集字段不唯一,怎么获取更多的字段?

精神病281号 2011-11-07 09:32:29
有两张表,table1 ,table2,
table1
id name
1101 北京-入库
1102 北京-出库
1103 北京-降雨
1104 北京-平均
2101 广州-入库
2102 广州-出库
2103 广州-降雨
2104 广州-平均
.......
table1中的id是传感器,传感器会每小时抓取数据入库
id time data
1101 8:00 20
1101 7:04 25
.....
1102 4:00 30

我现在需要的数据是这样子,比如我想知道北京 当前时间最大的传感器 的数据

id name time data
1101 北京-入库 8:00(1101中时间最大) 20
1102 北京-出库 8:00(1102中时间最大) 40
.........
我写了一个这样的sql
 select max(time),id from table2 where  id in(
select id from table1 where name like '%北京%' and (
name like '%北京-出库%' or name like '%北京-出库%') ) group by id

这样只能得到
id max(time) 这两个字段,由于这两个字段都不是唯一,也就是说,table2中时间有很多相同的,id也有很多相同的
无法在外面嵌套select * from table2 where id in(。。)这样子来获得其他字段,
小弟sql很菜,求高手帮帮忙啊!
...全文
255 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT职场成长课 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tx2730 的回复:]
这样应该可以实现.

SQL code
SELECT t1.ID, t1.NAME, t2.TIME, t2.DATA
FROM table1 t1,
(SELECT ID, TIME, DATA
FROM (SELECT ID, TIME, DATA,
ROW_NUMBER () OVER (PAR……
[/Quote]+1
opps_zhou 2011-11-08
  • 打赏
  • 举报
回复
row_number() over(partition by 分组 order by 排序)
007-x 2011-11-08
  • 打赏
  • 举报
回复
这样应该可以实现.
SELECT t1.ID, t1.NAME, t2.TIME, t2.DATA
FROM table1 t1,
(SELECT ID, TIME, DATA
FROM (SELECT ID, TIME, DATA,
ROW_NUMBER () OVER (PARTITION BY ID ORDER BY TIME DESC)
rn
FROM table2)
WHERE rn = 1) t2
WHERE t2.ID = t1.ID AND t1.NAME LIKE '北京%'
xiaobn_cn 2011-11-08
  • 打赏
  • 举报
回复

select *
from table2,
table1
where table2.id = table1.id
and table1.name like '%北京%'
and (table2.id,table2.time) in (select id,max(time) from table2 group by id);
m540920181 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 zxl10059 的回复:]
有两张表,table1 ,table2,
table1
id name
1101 北京-入库
1102 北京-出库
1103 北京-降雨
1104 北京-平均
2101 广州-入库
2102 广州-出库
2103 广州-降雨
2104 广州-平均
.......
table1中的id是传感器,传感器会每小时抓取数据入库
id time data
1101 8:00……
[/Quote]

select a.id , a.name ,b.time,b.date from table1 a,table2 b where a.id = b.id and time=(select max(time)from table2);
这样就可以了
coolkisses 2011-11-08
  • 打赏
  • 举报
回复
重点是数据,表2里,看上去像是出入明细,如果里面有同一时间出的两批货,数量不同。
这时,需求又要如何解释?
xpingping 2011-11-08
  • 打赏
  • 举报
回复
select max(time),id from table2 where id in(
select id from table1 where name like '%北京%' and (
name like '%北京-出库%' or name like '%北京-出库%')
) group by id
红字部分可以省略,当like时“%”表示0或者多个字符,
另外你table2中ID, TIME可以作为联合主键处理的
顺便顶2楼
虫洞 2011-11-07
  • 打赏
  • 举报
回复
表述很模糊
把你想要的结果写完整
大家都可以帮你解决的

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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