В моей таблице MeterReading у меня есть
-Id(Primary)
-ProjectMeterId
-MeterRead
-ReadDate
-ReadCount
У меня есть несколько записей для данного ProjectMeterId. Я хочу обновить ReadCount только тех строк, где ReadDate является минимальным (для данного ProjectMeterId), т.е.
Update MeterReading
set ReadCount = 1234
where (ReadDate is minimun for a given ProjectMeterId)
ПРИМЕЧАНИЕ. В таблице много ProjectMeterId, поэтому необходимо обновить несколько значений. Как я должен сделать это в запросе, без объявления каких-либо SP, объявления переменных таблицы и все ?? По этой причине обновление всех записей занимает более 10 минут.
Вот что я сейчас делаю:
UPDATE TTable
SET TTable.ReadCount= 222
From
(
Select * From MeterReading where Id in
(
Select Id From
(
SELECT Min(Id)as Id, MIN(ReadDate) as ReadDate, ProjectMeterId FROM MeterReading
WHERE ProjectMeterId IS NOT NULL AND ProjectId IS NOT NULL Group By ProjectMeterId
) as temp1
)
) TTable,
(
Select * From MeterReading where Id in
(
Select Id From
(
SELECT MIN(ReadDate) as ReadDate, ProjectMeterId FROM MeterReading
WHERE ProjectMeterId IS NOT NULL AND ProjectId IS NOT NULL Group By ProjectMeterId
) as temp2
)
) STable
Where STable.ProjectMeterId = TTable.ProjectMeterId
но Min (id) внутри subQueries дает мне ту строку, которая имеет минимальный Id, специфичный для ProjectMeterId, а не ReadDate.
Что мне делать?