:这个查询如何写?(100分)

  • 主题发起人 潇湘夜雨
  • 开始时间

潇湘夜雨

Unregistered / Unconfirmed
GUEST, unregistred user!
在SQL数据库中有若干表:
ReactorInfo:
ReactorName(varchar)
Description(varchar)
-----------------------
TagInfo:
TagName(varchar)
ReactorName(varchar)
-----------------------
Tag(对于TagInfo中的每条记录都有与其TagName同名的表):
theTime(DateTime) keyword
Value(float)

其中一个ReactorName对应多个TagName,而TagInfo表中的所有TagName均对应一个表,其中记录了该TagName在不同时间的数值.

现在想把同一ReactorName的所有TagName的最新数值都显示在一个DBGRID中,请问怎么写SQL呢?


 
例如对于ReactorName='T101'这一纪录:
在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

 
先得到一个数据集tdb1返回所有相关的tagname,
sqlstr:=''
tdb1.first

while not tdb1.eof do
begin
sqlstr='select last(value) from'+tdb1['tagname']+' ';
tdb1.next;
if not tdb1.eof then
sqlstr=sqlstr+' union ';
end

将sqlstr给TADOQUERY应该好使
 
接受答案了.
 
顶部