У меня есть 2 таблицы, одна из которых содержит идентификаторы счетчика, а другая содержит измерения для некоторых метров в первой таблице. Это структура таблицы:Выберите последнее значение за месяц для всех заданных идентификаторов
MeterConfig:
- MeterID (INT)
- MeterNumber (символ [16])
- Тип (символ [25])
чтения:
- MeterID (int)
- Дата (даты и время)
- значение (числовой (18,6))
Мне нужно получить последнее чтение (и его дату) из заданного периода для каждого метра, а также номер счетчика , Мне удалось сделать это в T-SQL, хотя я не очень доволен тем, как я сделал это с помощью этого запроса:
select distinct
cfg.MeterNumber,
(select top 1 r.Date from Readings as r where r.Date between @startdate and @endDate and r.MeterID = cfg.MeterID order by r.Date desc) as Date,
(select top 1 r.Value from Readings as r where r.Date between @startdate and @endDate and r.MeterID = cfg.MeterID order by r.Date desc) as Value
from
MeterConfig cfg, Readings r1
where cfg.MeterID = r1.MeterID and r1.Date between @startdate and @endDate;
Как я могу сделать это более эффективно?
Спасибо, это кажется намного лучше. Однако одно изменение; первая часть должна быть 'SELECT DISTINCT cfg.MeterNumber, r1.Date, r1.Value'. ** r ** выходит за рамки. – alex
@alex, thx, я обновил ответ. Если вы считаете, что это полностью отвечает на ваш вопрос, вы можете принять это как ответ. –
@Lieven Я оставлю вопрос открытым еще на несколько часов, после чего, если это лучший ответ, я помету ваш ответ как принятый. Спасибо! – alex