从设计不佳的数据库中提取相关信息

时间:2015-05-19 23:00:58

标签: ms-access ms-access-2010

我有一个数据库,其中包含科学仪器分析的数千个样本的记录。我需要从中提取一些具体数据。

例如,我的数据库看起来有点像这样:

ID     Time     SensorValue
---------------------------
aaaa   1        xxxx
aaaa   2        xxxx
aaaa   3        xxxx
bbbb   1        xxxx
bbbb   2        xxxx
bbbb   3        xxxx
bbbb   4        xxxx
cccc   1        xxxx
cccc   2        xxxx
cccc   3        xxxx
cccc   4        xxxx
dddd   1        xxxx
eeee   1        xxxx
eeee   2        xxxx
eeee   3        xxxx
eeee   4        xxxx
eeee   5        xxxx

等等。有数以千计的唯一ID。时间并不总是不变的。有些分析需要500秒,有些分析需要5000秒。

我需要的是能够在运行的最后一个步骤找到样品的传感器值,无论是500还是5000.如果我只有10或20个样品,我会手工完成,但是因为我有成千上万,所以我需要自动化它。

有人可以帮助查询以提取此信息吗?我希望我的结果看起来像这样(假设输入与上面相同):

ID     Time     SensorValue
---------------------------
aaaa   3        xxxx
bbbb   4        xxxx
cccc   4        xxxx
dddd   1        xxxx
eeee   5        xxxx

3 个答案:

答案 0 :(得分:1)

将表连接到子查询的结果,该子查询找到每个ID的最后一次:

select d.*
from (select ID, max(Time) last
      from data_table
      group by ID) t
join data_table d on t.ID = d.ID
  and d.Time = t.last

答案 1 :(得分:0)

我无法对第一个答案发表评论,但我在此重复答案,您需要使用表格的真实姓名来命名真实姓名。

SELECT realnameofyourtable.id, realnameofyourtable.[time], realnameofyourtable.sensorvalue FROM realnameofyourtable INNER JOIN ( SELECT ID, max(time) as timedata FROM realnameofyourtable GROUP BY ID) AS lastid ON (realnameofyourtable.[time] = lastid.timedata) AND (realnameofyourtable.id = lastid.id)

答案 2 :(得分:0)

您可以使用子查询查找最新时间:

Select ID, Time, SensorValue
From YourTable
Where Time In
    (Select Max(Time) 
    From YourTable As T
    Where T.ID = YourTable.ID)