Вы используете массив как объект, разница между getElementbyId
и getElementsByClassName
такова:
getElementbyId
вернет вам объект. getElementsByClassName
вернет вам массив. Метод
blockquote>getElementsByClassName(classNames)
принимает строку, содержащую неупорядоченный набор уникальных разделенных пробелами маркеры, представляющие классы. При вызове метод должен возвращать живой объектNodeList
, содержащий все элементы документа, которые имеют все классы, указанные в этом аргументе, получив классы, разделив строку на пробелы. Если в аргументе нет токенов, тогда метод должен возвращать пустой NodeList.https://www.w3.org/TR/2008/WD-html5 -20080610 / dom.html # getelementsbyclassname
getElementById
Метод getElementById () обращается к первому элементу с указанным id.
blockquote>http://www.w3schools.com/jsref/met_doc_getelementbyid.asp
в вашем коде строки:
1- document.getElementsByClassName ('myElement'). Style.size = '100px';
blockquote>НЕ будет работать, как ожидалось, потому что
getElementByClassName
вернет массив, и массив будет НЕ имеет свойствоstyle
, вы будете обращаться к каждомуelement
, итерации их.Вот почему функция
getElementById
работает на вас, эта функция вернет вам прямой объект, и поэтому вы сможет получить доступ к свойствуstyle
.
Требуется накопительная сумма:
select t.*,
sum(revenue) over (order by yyyymm rows between 12 preceding and 1 preceding) as trailing_12_months_revenue
from t;
Это занимает последние 12 месяцев в данных (как написано). Если вы пропустите месяцы, это можно изменить для этого.
Я не знаю, поможет ли это вам или нет, но это будет подход для Microsoft Sql Server, за исключением 12-месячной части уравнения, что было бы немного работы в T-Sql, если дата хранится в этом формате, чтобы преобразовать ее в дату и выполнить где в течение этой даты.
CREATE TABLE #temp (yyyymm int, revenue int)
INSERT INTO #temp
(
yyyymm,
revenue
)
VALUES
(201701, 450), (201701, 600), (201702,350)
SELECT
yyyymm,
SUM(revenue)
From #temp
GROUP BY #temp.yyyymm
DROP TABLE #temp
Простейшим способом является использование подвыбора (я назвал вашу таблицу foo
):
select
foo.*,
(select sum(revenue) from
foo ly
where
ly.yyyymm between foo.yyyymm - 100 and foo.yyyymm - 1
) as last_years_revenue
from foo;
Это дает следующий результат:
Ввод:
yyyymm | revenue
--------+---------
201701 | 450
201701 | 600
201702 | 350
201601 | 45
201601 | 60
201602 | 35
yyyymm | revenue | last_years_revenue
--------+---------+--------------------
201701 | 450 | 140
201701 | 600 | 140
201702 | 350 | 1085
201601 | 45 | NULL
201601 | 60 | NULL
201602 | 35 | 105
[ 116] Выручка 2016 года составляет 60 + 35 + 45 = 140.
Доход за 2017-02 гг. Составляет 450 + 600 + 35 = 1085.