具有相同日期时间的记录被错误地视为不同事件

时间:2014-07-25 18:57:02

标签: sql datetime

我有一张捕捉表,这张照片是在不同摄像站拍摄的不同动物的时间戳照片。我想计算每只动物到每个摄像站的访问频率,使用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条记录包含相同的StationIDSpeciesIDAnimalIDcDateTime,那么{ {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 是主键。

1 个答案:

答案 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;