Обновление MS Access с приращением предыдущей записи - PullRequest
2 голосов
/ 02 июня 2011

У меня есть база данных MS Access 2007, для которой мне нужно создать обновление.Таблица, которую я пытаюсь обновить, выглядит следующим образом:

 CarID  WeekOf          NumDataPoints   NumWksZeroPoints
 3AA    May-14-2011     23              0
 7BB    May-14-2011     9               0

 3AA    May-21-2011     35              0
 7BB    May-21-2011     0               1

 3AA    May-28-2011     24  
 7BB    May-28-2011     0   

Я обрабатываю последний набор записей за 28 мая 2011 года, и суть заключается в том, чтобы обновлять каждую машину на количество недель, в которых не было точек данных.,Я делаю это, проверяя количество точек на текущей неделе, и если у него есть несколько точек, тогда #WeeksZeroPoints обнуляется, а если текущее количество точек равно нулю, то я беру подсчет и увеличение предыдущих недель на единицу.В течение моей прошлой недели у меня был бы ввод

  0
  2

Так что я попробовал что-то вроде

UPDATE tblCars 
SET NumWksZeroPoints = IIF(NumDataPoints<>0, 0, (SELECT MAX(NumWksZeroPoints) AS wzp 
                                                 FROM tblCars AS f 
                                                 WHERE f.CarID=tblCars.CarID AND 
                                                       f.WeekEnding=#5/21/2011#) + 1
                       )
WHERE WeekOf=#5/28/2011#;

К сожалению, это не сработает так, как я думал, что будет.Я думаю, что у меня есть концепция и большинство SQL, я просто не могу заставить его работать.Это против MS Access, поэтому некоторые другие приемы, которые я знаю, просто не работают.Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

Вы могли бы (и некоторые могли бы сказать) сделать это как запрос, не обновляя таблицу. Если вы регистрируете точки данных в неделю для каждого автомобиля, ваш запрос может вычислить количество недель, в течение которых у автомобиля не было точек данных, с использованием математики даты. Что произойдет, если кто-то вставит данные для автомобиля после того, как вы запустите обновление? В результате вы получите несоответствующие данные.

1 голос
/ 02 июня 2011

Используя ваши образцы данных, я запустил следующее

UPDATE tblcar AS c 
       INNER JOIN tblcar AS previous 
         ON c.carid = previous.carid 
SET    c.numwkszeropoints = Iif([previous].[NumWksZeroPoints] = 0, 0, 
                                   [previous].[NumWksZeroPoints] + 1) 
WHERE c.weekof =#5/28/2011 # 
         AND previous.weekof =#5/21/2011#;

Стол впоследствии выглядел так

CarID WeekOf     NumDataPoints NumWksZeroPoints
----- ---------- ------------- -----------------
3AA   05/14/2011 23            0
7BB   05/14/2011 9             0
3AA   05/21/2011 35            0
7BB   05/21/2011 0             1
3AA   05/28/2011 24            0
7BB   05/28/2011 0             2

По сути, запрос самостоятельно присоединяется к предыдущей неделе и обновляет текущую неделю до значения предыдущей недели + 1, если оно не равно нулю.

...