MySQL показывает среднее значение в день случайно записанного целого числа

Имейте таблицу, которая записывает отметку времени и целочисленное показание (date_entered, показание) с электросчетчика (кВтч). Хотел бы построить график ежедневного использования... большинство показаний ежедневно, некоторые с разницей в несколько дней - случайное время дня. Хотите, чтобы среднесуточная разница между предыдущей записью возвращалась за каждый день. *Обратите внимание, что средние значения не точны.

Example Data:
date_entered    reading
2012-06-01 17:02    18522
2012-06-02 14:56    18641
2012-06-03 10:55    18677
2012-06-06 15:16    18702
2012-06-11 13:28    18803
2012-06-13 17:33    18850

Example Output:
Date              Daily Average
2012-06-01 12:00    
2012-06-02 12:00    19
2012-06-03 12:00    130
2012-06-04 12:00    43
2012-06-05 12:00    43
2012-06-06 12:00    43
2012-06-07 12:00    8
2012-06-08 12:00    8
2012-06-09 12:00    8
2012-06-10 12:00    8
2012-06-11 12:00    21
2012-06-12 12:00    21
2012-06-13 12:00    22

person Edward    schedule 12.06.2012    source источник
comment
У вас есть возможность создать таблицу всех дат, а затем присоединиться к ней? Если это так, вы можете легко заполнить пробелы, такие как промежуток между 06-03 и 06-06, а затем создать функцию, которая распределяет нули снизу вверх.   -  person philwinkle    schedule 13.06.2012
comment
Да, я мог бы сделать это ... просто подумал, что это может быть более чистый способ, о котором я не думал.   -  person Edward    schedule 13.06.2012


Ответы (1)


Вы можете выполнить шаги, которые вы предприняли самостоятельно, чтобы рассчитать средние значения вручную. Вот его явное объяснение:

У вас есть список чтений, который содержит две части информации:

  • Отметка времени
  • кВтч агрегат

И вам нужен список ежедневного потребления с:

  • Свидание
  • Потребление кВтч

Вы должны перебрать первый список и заполнить второй список:

За каждое Чтение (начиная со второго дня ваших записей):

  • Получить последний элемент в чтениях, который имеет предыдущую дату.
  • Сравните даты и получите разницу в днях (должно быть >= 1)
  • Для каждого дня, начиная со дня после последнего измерения и до текущей даты измерения, создайте одну запись в ежедневном потреблении (если они еще не созданы, потому что у вас есть два показания на одну и ту же дату).
  • Получите разницу в потреблении.
  • Разделите разницу в потреблении на разницу в днях, чтобы получить среднее значение.
  • Присвойте это среднее значение потреблению кВт/ч каждого из Ежедневных Потреблений со дня, следующего за последним считыванием, до текущей даты считывания.

Вуаля!

Это должно работать, даже если у вас есть более одного показания на одну и ту же дату, так как оно просто перепишет среднее значение, когда вы доберетесь до второго показания в тот же день (только убедитесь, что вы создаете только один элемент дневного потребления в день).

person Dil    schedule 12.06.2012
comment
Спасибо за совет... Наверное так и сделаю. - person Edward; 13.06.2012
comment
Пожалуйста. Этого должно быть достаточно. Я боялся, что вы захотите принять во внимание время суток чтения, что заставит вас делить дни на разные промежутки времени до и после чтения, перекрестно умножать промежутки времени и потребление... и немного усложнит задачу. выигрыш в точности. - person Dil; 13.06.2012