MySQL - вычислить накопление с момента сброса в таблице

Для простой функции конструктора:

function Person(){
    this.name = 'test';
}


console.log(Person.prototype.constructor) // function Person(){...}

Person.prototype = { //constructor in this case is Object
    sayName: function(){
        return this.name;
    }
}

var person = new Person();
console.log(person instanceof Person); //true
console.log(person.sayName()); //test
console.log(Person.prototype.constructor) // function Object(){...}

По умолчанию (из спецификации https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects / Object / constructor ), все прототипы автоматически получают свойство, называемое конструктором, которое указывает на функцию, на которой это свойство. В зависимости от конструктора к прототипу могут быть добавлены другие свойства и методы, которые не являются очень распространенной практикой, но все же разрешены для расширений.

Итак, просто отвечая: нам нужно убедиться, что значение в prototype.constructor правильно установлено, поскольку предполагается, что спецификация будет.

Должны ли мы всегда правильно устанавливать это стоимость? Это помогает при отладке и делает внутреннюю структуру совместимой со спецификацией. Мы должны определенно, когда наш API будет использоваться третьими сторонами, но не совсем, когда код будет окончательно выполнен во время выполнения.

1
задан Wizytor 16 January 2019 в 09:22
поделиться

1 ответ

Этот ответ для MySQL 8.

Требуемая информация является самой последней cum_distance для каждого пользователя с reset_event = 1. Вы используете MySQL 8, так что вы можете использовать оконные функции.

Вот один метод:

select r.*,
       (cum_distance - coalesce(preceding_reset_cum_distance, 0)) as runner_dist_since_reset
from (select r.*,
             min(cum_distance) over (partition by runner order by preceding_reset) as preceding_reset_cum_distance
      from (select r.*,
                   max(case when reset_event = 1 then start_date end) over
                       (partition by runner
                        order by start_date
                        rows between unbounded preceding and 1 preceding
                       ) as preceding_reset
            from runners r
           ) r
     ) r;
0
ответ дан Gordon Linoff 16 January 2019 в 09:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: