def handle(self, *args, **options):
        for sensor in Sensor.objects.all():
            cur = connection.cursor()
            power_average_qs = PowerAverage.objects.filter(
                sensor=sensor).order_by('-trunc_reading_time')
            sensor_reading_qs = SensorReading.objects.filter(
                sensor=sensor).order_by('-reading_time')

            try:
                latest_reading = sensor_reading_qs.latest('reading_time')
            except SensorReading.DoesNotExist:
                pass # No readings: nothing to do.
            else:
                print 'Inserting missing averages for sensor %d:' % sensor.id
                for average_type in PowerAverage.AVERAGE_TYPES:
                    # Don't confuse trunc_latest_reading_time with the
                    # similarly-named column of graph_poweraverage.
                    # trunc_latest_reading_time is the truncated
                    # reading_time of the latest row in graph_sensorreading
                    # for this sensor.
                    trunc_latest_reading_time = PowerAverage.date_trunc(
                        average_type, latest_reading.reading_time)

                    r = PowerAverage.insert_averages(cur, average_type, sensor,
                        trunc_latest_reading_time)
                    transaction.commit_unless_managed()
                    print '    \'%s\': %d rows' % (average_type, r)