Прежде всего, я новичок в MySQL, и я полностью извиняюсь, если я попрошу что-то, на что уже было ответили в разных «условиях». Я искал решение для этого уже более недели, и я не смог найти его, возможно, потому, что я не использую правильные ключевые слова. Пожалуйста, медведь со мной и моим невежеством в этом смысле :)MySQL Query из одной таблицы - выберите одно и то же поле дважды
У меня есть таблица со следующими полями:
ID int(11) NO PRI auto_increment
Building int(11) YES MUL
CounterNo int(11) YES MUL
ReadingDate datetime YES
StartMeter int(11) YES
EndMeter int(11) YES
CostKw decimal(10,6) YES
Multiplier smallint(3) YES
Я хочу, чтобы сделать запрос, который я хотел бы использовать для заполнения сравнения линейного графика, что вернет следующее:
Building | Cons1 | Cons2 | Month
1 1year ybefore Month
Если название месяца будет затем использоваться для заполнения оси X, и Cons1 будет расход для каждого здания, за каждый месяц в прошлом году, в то время как Cons2 бы потребление для каждого здания за каждый месяц в году для е.
Я уже играю, и до сих пор я получил к следующему:
SELECT Building,
CASE
WHEN ReadingDate >= DATE_SUB(NOW(), INTERVAL 1 YEAR)
THEN (EndMeter - StartMeter)
ELSE NULL
END
AS 'Cons1',
CASE
WHEN ReadingDate BETWEEN DATE_SUB(NOW(), INTERVAL 2 Year) AND DATE_SUB(NOW(), INTERVAL 1 Year)
THEN (EndMeter - StartMeter)
ELSE NULL
END
AS 'Cons2',
CONCAT(
MONTHNAME (
tblElectricReadings.ReadingDate
)
) AS MonthRecorded
FROM tblElectricReadings
WHERE ReadingDate >= DATE_SUB(NOW(), INTERVAL 2 YEAR)
ORDER BY ReadingDate
Это дает результаты, я хочу, но это не «консолидировать» (и опять же, извините если я использую неправильные слова здесь) Cons1 и Cons2 вместе, но вместо этого ставит нулевое значение в оба поля, создавая двойные записи, которые мне нужны. В принципе, запрос работает нормально, но это не тот результат, который я хочу. Я бы хотел, чтобы оба Cons1 и Cons2 были заполнены соответствующим потреблением в соответствии с каждым месяцем, чтобы я мог заполнить линейный график (с 2 строками, 1 для Cons1 и другой для Cons2) соответственно.
Надеюсь, я был достаточно ясен, если не простите меня и скажите, нужна ли вам дополнительная информация.
Заранее благодарим за любую помощь, которую вы можете предоставить.
РЕДАКТИРОВАТЬ: ответить Paul - для каждого здания есть только 1 запись за каждый месяц, поэтому это не проблема. Но спасибо, что заметили это! Также спасибо миллиону xQbert - ваш ответ именно то, что я искал :) Спасибо за ваше время.
использование max и группы по. похоже на: http://stackoverflow.com/questions/3263126/merging-two-rows-to-one-while-replacing-null-values – xQbert
Если в течение одного месяца есть несколько записей - какой из них вы хотите взять? –