У меня есть две таблицы:возвращает последнюю строку, которая удовлетворяет условию в SQL
Meter
ID SerialNumber
=======================
1 ABC1
2 ABC2
3 ABC3
4 ABC4
5 ABC5
6 ABC6
RegisterLevelInformation
ID MeterID ReadValue Consumption PreviousReadDate ReadType
============================================================================
1 1 250 250 1 jan 2015 EST
2 1 550 300 1 feb 2015 ACT
3 1 1000 450 1 apr 2015 EST
4 2 350 350 1 jan 2015 EST
5 2 850 500 1 feb 2015 ACT
6 2 1000 150 1 apr 2015 ACT
7 3 1500 1500 1 jan 2015 EST
8 3 2500 1000 1 mar 2015 EST
9 3 5000 2500 4 apr 2015 EST
10 4 250 250 1 jan 2015 EST
11 4 550 300 1 feb 2015 ACT
12 4 1000 450 1 apr 2015 EST
13 5 350 350 1 jan 2015 ACT
14 5 850 500 1 feb 2015 ACT
15 5 1000 150 1 apr 2015 ACT
16 6 1500 1500 1 jan 2015 EST
17 6 2500 1000 1 mar 2015 EST
18 6 5000 2500 4 apr 2015 EST
Я пытаюсь группе метр сериала и вернуть последнюю фактическую дату чтения для каждого из счетчиков, но я не уверен, как это сделать. Вот SQL у меня до сих пор:
select a.SerialNumber, ReadTypeCode, MAX(PreviousReadDate) from Meter as a
left join RegisterLevelInformation as b on a.MeterID = b.MeterID
where ReadType = 'ACT'
group by a.SerialNumber,b.ReadTypeCode, PreviousReadDate
order by a.SerialNumber
Я не могу показаться, чтобы получить функцию MAX
вступили в силу в возвращении только последнюю строку фактического чтения и возвращает все даты и тот же метр сериал отображается несколько раз.
Если я использую следующий SQL:
select a.SerialNumber, count(*) from Meter as a
left join RegisterLevelInformation as b on a.MeterID = b.MeterID
group by a.SerialNumber
order by a.SerialNumber
, то каждый последовательный показан только один раз. Любая помощь будет принята с благодарностью.
Он возвращает все даты чтения, потому что вы включили эту колонку в предложение 'GROUP BY'. Вытащите его и посмотрите, что вы получите. –
Имеет ли 'предыдущийReadDate' столбец данных даты? –
Какой тип 'rdbms' вы используете? – sgeddes