我有一张捕捉表,这张照片是在不同摄像站拍摄的不同动物的时间戳照片。我想计算每只动物到每个摄像站的访问频率,使用NewVisit列标记每次新访问的第一条记录。
对于每次访问记录,AnimalID
处可能有一个或多个相同StationID
的记录。 VisitStart
是每次访问中最早捕获/记录的cDateTime
。同样,VisitEnd
是此次访问的最新记录。
我写了以下查询,将记录标记为New Visit
,当它们与记录日期具有相同的VisitStart
时。
UPDATE Capture
SET Capture.NewVisit = Yes
WHERE (((Capture.VisitStart)=Capture.cDateTime) And
((Capture.SurveyID)=1) And
((Capture.SpeciesID)=1));
这适用于大多数访问,但有时会有多个记录具有完全相同的时间戳(这发生在相机拍摄3张照片时 - 快速连续拍摄3张照片)。在这种情况下,我的查询将所有3条记录标记为NewVisit
。
有没有办法阻止这种情况发生,通过指定如果> 1条记录包含相同的StationID
,SpeciesID
,AnimalID
和cDateTime
,那么{ {1}}仅适用于其中一条记录,例如最低NewVisit
的记录。
这是运行CaptureID
查询后我的表格的一个示例:
NewVisit
CaptureID SurveyID StationID SpeciesID AnimalID TRANScDateTime VisitStart NewVisit
1307 1 5 1 5 15/07/2013 08:04:50 15/07/2013 08:04:50 TRUE
8172 1 5 1 2 15/07/2013 08:04:50 15/07/2013 08:04:50 TRUE
1306 1 5 1 2 15/07/2013 08:04:50 15/07/2013 08:04:50 TRUE
8173 1 5 1 2 15/07/2013 08:04:50 15/07/2013 08:04:50 TRUE
1308 1 5 1 2 15/07/2013 08:04:51 15/07/2013 08:04:50 FALSE
8174 1 5 1 5 15/07/2013 08:04:51 15/07/2013 08:04:50 FALSE
1309 1 5 1 5 15/07/2013 08:08:40 15/07/2013 08:04:50 FALSE
是主键。
答案 0 :(得分:1)
试试这个:
UPDATE TOP (1) Capture
SET Capture.NewVisit = Yes
WHERE Capture.VisitStart=Capture.cDateTime
ORDER BY Capture.CaptureID,
Capture.SurveyID,
Capture.StationID,
Capture.SpeciesID,
Capture.AnimalID,
Capture.TRANScDateTime;