我是使用Access和SQL的新手,我正在尝试创建一个跟踪不同属性用水量的数据库
目前用于这样做的方法是获取抄表并记录该值。这进入表Meter Reading
,其中包含4个主要字段:Property
,Meter
,Date
,Reading
。
我想为Last Reading
添加第5列。理想情况下,此列将执行更新并将Last Reading
设置为先前读取的仪表。
实施例
Property Meter Date Reading Last Reading
1 A 2/2/2015 4518 1X
2 B 2/2/2015 1258 2X
1 A 3/2/2015 4595 3X
我想要做的是Last Reading
提交给我告诉我上次读取电表的时间,以及3X
点会更新显示4518
,因为那是最后一次读取属性1
,米A
时的值。然后我可以轻松地做一个数学领域来获得差异。
我试过了
Update [Meter Reading}
Set [Last Reading]= Reading
Where Date=Max
它只会将阅读值复制到最后阅读中,所以它没有帮助。 我也尝试过做
Update [Meter Reading]
Set [Last Reading]=(Select Reading
*这是我遇到麻烦的地方我没有能够选择正确的属性,仪表和日期来选择合适的阅读材料。 我不知道这是否可能,但欢迎任何帮助,谢谢。
答案 0 :(得分:0)
我通过VBA执行类似的操作,您可以在其中打开记录集并按特定顺序排序,这样您就可以循环访问数据并使用上一条记录中的值更新每条记录。我不能保证它漂亮或高效,但它完成了工作。而且我个人会连接这个属性&米,因为组合似乎是你唯一的标识符?这就是我。
Public Function GetLastReadingByMeter()
Dim db As DAO.Database, rs As DAO.Recordset, strSQL As String
Dim strMeter As String, intReading As Integer
DAO.DBEngine.SetOption dbMaxLocksPerFile, 9999
Set db = CurrentDb()
Set rs = db.OpenRecordset("select * from your_table_name order by property_meter, date", dbOpenDynaset)
rs.MoveFirst
strMeter = rs.Fields("property_meter").Value
intReading = rs.Fields("Reading").Value
rs.Edit
'If you want the first row's last reading equal to itself this line below does it (retrofit from my original dates), else you could set this to zero
rs.Fields("LastReading").Value = rs.Fields("Reading").Value
rs.Update
rs.MoveNext
Do Until rs.EOF
If strMeter = rs.Fields("property_meter").Value Then
rs.Edit
rs.Fields("LastReading").Value = intReading
rs.Update
intReading = rs.Fields("Reading").Value
Else
rs.Edit
rs.Fields("LastReading").Value = rs.Fields("Reading").Value
rs.Update
strMeter = rs.Fields("property_meter").Value
intReading = rs.Fields("Reading").Value
End If
rs.MoveNext
Loop
End Function