求助SQL大侠:这个SQL语句怎么写呢?

qjwyk 2002-12-28 12:11:03
是这样的:有一个数据采集点,每个数据采集点有一个电话拨入号(PhoneNum),每个采集点下面有若干个站(ChildID),每个每个站ChildID下有四个ChannelID,每个ChannelID下有三个仪表(MeterID):温度InstTemp,压力InstPres,流量InstFlow

有两张表:
一张是DeviceInfo,有如下列:
PhoneNum,ChannelID,MeterID,ChildID,StationState,ComName,Mode,StationName
其中:PhoneNum,ChannelID,MeterID,ChildID是主健,一个PhoneNum下有几个ChildID,每个ChildID下有四个ChannelID,每个ChannelID下有三个MeterID;

另一张表是RTData,有如下列:
PhoneNum,ChannelID,ChildID,ColTime,InstPres(压力),InstTemp(温度),InstFlow(流量),AddupFlow(当前流量累计), AddupTemp(当前热量累计),YAddupFlow(昨日流量累计),YAddupTemp(昨日热量累计)。
PhoneNum,ChannelID,ChildID是主健,引用上面一张表DeviceInfo的三个对应字段做外健。

现在要这样一个记录集:
取出第一张表的PhoneNum,ChannelID,ChildID,StationName,第二张表的InstTemp(温度),InstFlow(流量),AddupFlow(当前流量累计), AddupTemp(当前热量累计),YAddupFlow(昨日流量累计),YAddupTemp(昨日热量累计),同时要根据AddupFlow(当前流量累计)+YAddupFlow(昨日流量累计)+YAddupFlow(昨日流量累计)+……,来算出本月的流量累计。

该怎么写SQL语句阿?尤其是那个本月累计怎么算阿?
...全文
46 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
My_first 2002-12-28
  • 打赏
  • 举报
回复
楼上的星测得真快。
CrazyFor 2002-12-28
  • 打赏
  • 举报
回复
select a.*,b.*,sum(AddupFlow+YAddupFlow) from deviceinfo a left outer join rtdate b on a.phonenum=b.phonenum and a.channelid=b.channelid and a.childid=b.childid
where datepart(month,b.coltime)=monthNum and datepart(year,b.coltime)=yearNum
qjwyk 2002-12-28
  • 打赏
  • 举报
回复
多谢。不过好像还有点问题。
我把一部分数据贴出来给你看:
DeviceInfo:

PhoneNum,ChannelID,MeterID,ChildID,StationState,ComName,Mode,StationName
001 01 01 00 1 COM1 0 Lab
001 01 02 00 1 COM1 0 LAB
001 01 03 00 1 COM1 0 LAB
001 02 01 00 1 COM1 0 LAB
001 02 02 00 1 COM1 0 LAB
001 02 03 00 1 COM1 0 LAB
001 03 01 00 1 COM1 0 LAB
001 03 02 00 1 COM1 0 LAB
001 03 03 00 1 COM1 0 LAB
001 04 01 00 1 COM1 0 LAB
001 04 02 00 1 COM1 0 LAB
001 04 03 00 1 COM1 0 LAB

RTDataTbl:

PhoneNum ,ChannelID ,ChildID,ColTime(采集时间) ,InstPres,InstTemp,InstFlow ,AddupFlow,AddupTemp,YAddupFlow,YAddupTemp

后面的数据没有列出,InstPres,InstTemp,InstFlow 对每一采集时间是不一样的,而AddupFlow,AddupTemp,YAddupFlow,YAddupTemp 对同一天是一样的

PhoneNum ChannelID ChildID ColTime
001 01 00 2002-12-16 10:29:35.000
001 01 00 2002-12-16 10:29:46.000
001 01 00 2002-12-16 10:29:54.000
001 01 00 2002-12-16 10:30:04.000
001 01 00 2002-12-16 10:36:30.000
001 01 00 2002-12-16 10:36:38.000
001 02 00 2002-12-16 10:29:35.000
001 02 00 2002-12-16 10:29:46.000
001 02 00 2002-12-16 10:29:54.000
001 02 00 2002-12-16 10:30:05.000
001 02 00 2002-12-16 10:36:30.000
001 02 00 2002-12-16 10:36:38.000
001 03 00 2002-12-16 10:29:35.000
001 03 00 2002-12-16 10:29:46.000
001 03 00 2002-12-16 10:29:54.000
001 03 00 2002-12-16 10:30:05.000
001 03 00 2002-12-16 10:36:30.000
001 03 00 2002-12-16 10:36:38.000
001 04 00 2002-12-16 10:29:35.000
001 04 00 2002-12-16 10:29:46.000
001 04 00 2002-12-16 10:29:54.000
001 04 00 2002-12-16 10:30:05.000
001 04 00 2002-12-16 10:36:30.000
001 04 00 2002-12-16 10:36:38.000

My_first 2002-12-28
  • 打赏
  • 举报
回复
还有个家伙没睡呀,我正找你有事呢? 楼下有个问题,关于存储过程出错的控制
bluepower2008 2002-12-28
  • 打赏
  • 举报
回复
自连接
qjwyk 2002-12-28
  • 打赏
  • 举报
回复
我弄出来了

select d.StationName,r.PhoneNum,r.ChildID,r.ChannelID,MAX(r.ColTime) ColTime,max(r.InstPres) InstPres,
max(r.InstFlow) InstFlow,max(r.InstTemp) InstTemp,
max(r.adduptemp) TaddupTemp,max(r.addupflow) TaddupFlow,
max(r.addupTemp)+Sum(r.YaddupTemp) MaddupTemp,max(r.addupFlow)+Sum(r.YaddupFlow) MaddupFlow
from DeviceInfoTbl d,rtdatatbl r
where datepart(month,r.coltime)=datepart(month,getdate()) and datepart(year,r.coltime)=datepart(year,getdate())
AND d.PhoneNum=r.PhoneNum and d.ChildID=r.ChildID and d.ChannelID=r.ChannelID and d.mode=1
group by d.StationName,r.PhoneNum,r.ChildID,r.ChannelID

谢谢CrazyFor(烟草)的提示,
还有其他的朋友

可以交差了

34,590

社区成员

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

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