Обновить строку только там, где максимальная дата - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть следующие данные

Date                    Week    ID      Tot_Seconds   O_Seconds   Week_ID
8/14/2011 12:00:00 AM   5823    22180   170043        26043         18
8/21/2011 12:00:00 AM   5824    22180   126471           0          18

Я пытаюсь обновить столбец в другой таблице, значение O_Seconds, где совпадают неделя и идентификатор, но я хотел бы только обновить, где max (дата) для каждой недели. Причина в том, что таблица с источником данных имеет даты по неделям, где таблица, которую я буду обновлять, является ежедневной, и, используя текущий запрос, обновляет, например, 26043 для всех дней, где совпадают идентификатор и неделя, искажая мое будущее запросы, где я буду суммировать значения этих столбцов.

Можно ли просто обновить максимальную дату?

1 Ответ

4 голосов
/ 19 сентября 2011

как то так

Производная таблица используется для получения 1-й строки в неделю / ID

UPDATE
   O
SET
   SomeCol = S.O_Second
FROM
   OtherTable O
   JOIN
   (
   SELECT
      Week, ID, O_Second, 
      ROW_NUMBER() OVER (PARTITION BY Week, ID ORDER BY Date DESC) AS rn
   FROM
      ThisTable
   ) S ON O.Week = S.Week AND O.ID = S.ID
WHERE
   S.rn = 1

Для SQL Server 2000 и более ранних версий вам нужен агрегат. См. DBA.SE для получения дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...