select a.*,b.theTime,b.Value from (select m.*,n.TagName from ReactorInfo m,TagName n where m.ReactorName=n.ReactorName) a,Tag b where a.TagName=b.TagName
获得表名,用union根据表名拼sql语句实现: select max(?) from table1 union select max(?) from table2....
使用动态SQL,From后面的表名是不固定的。 SELECT TOP 1 thevalue,:tablename1 FROM :tablename1 ORDER BY TheTime UNION ALL ...
根据TagInfo表中的记录数进行循环Union~~~Select TagName, (Select Value From :TableName Where TheTime=(Select Max(TheTime) From :TableName)) As TheValue From TagInfo Order By TagNameUnion........参数:TableName就是TagInfo中的TagName字段的值
from ReactorInfo m,TagName n where m.ReactorName=n.ReactorName) a,Tag b
where a.TagName=b.TagName
这个语句的难度在于要在多个表中取数据。因为每个TagName有一个表。
请继续。
在TagInfo中有三条对应纪录:
TagName ReactorName
1. TI1101 T101
2. TI1102 T101
3 TI1103 T101
则数据库中对应有三个表:TI1101,TI1102,TI1103。
这三个表的结构是相同的,均包括两个字段:
theTime(DateTime) keyword
Value(float)
以TI1101为例,其纪录如下:
TheTime Value
2001/10/8 10:10 122.1
2001/10/8 10:15 123.3
2001/10/8 10:20 122.9
2001/10/8 10:25 123.1
2001/10/8 10:30 122.7我想得到的结果是这样的:
TagName theValue(时间最新的一行)
TI1101 122.7
TI1102 10.987
TI1103 586.98请大家想想办法。分不够可以再加。
select max(?) from table1 union select max(?) from table2....
SELECT TOP 1 thevalue,:tablename1 FROM :tablename1 ORDER BY TheTime
UNION ALL
...
(Select Value From :TableName Where TheTime=(Select Max(TheTime) From :TableName)) As TheValue
From TagInfo Order By TagNameUnion........参数:TableName就是TagInfo中的TagName字段的值