powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как вычесть строки по id плантации ?
6 сообщений из 6, страница 1 из 1
Как вычесть строки по id плантации ?
    #39877810
sqlnoobie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго вечера. Сразу говорю что я новичок. Использую MySQL, не могу понять как всё логичнее выстроить и составить такой запрос на расчёт.
Нужно фиксировать плотность разрастания растений. Она становиться всё время больше.
Всего есть 18 видов растений, каждому сотруднику выдаёться на руки по 1 виду каждого, у каждого сотрудника есть отдельная плантация под каждое растение для наблюдения. Каждый сотрудник наблюдает за своими 18 растениями и ежемесячно 28 числа должен фиксировать их плотность разрастания в см2. Период наблюдения 1 год, а по январям эти же растения переводятся просто на другое удобрение и наблюдение и фиксация данных продолжается. Новое растение может быть выдано в любой месяц до 28 числа, тогда этот первый заведённый показатель 28 числа и должен быть площадью разрастания.

Но старший научный сотрудник в базе должен видеть уже актуальную разницу реального разрастания за каждый месяц, должны вычитаться данные разрастания из предыдущего месяца по id плонтации, если я правильно мыслю.

Я думал как-то так, тут 6 строка - это впервые выданное растение.
Таблица для сотрудников:
id сотрудника id плантации счётчик строк timestamp Показания1 17 1 2018-12-28 211 17 3 2019-01-28 251 17 5 2019-02-28 281 16 6 2019-02-28 22 3 2 2018-12-28 252 3 4 2019-01-28 302 3 7 2019-02-28 351 16 8 2019-03-28 8

Если старший сотрудник выбрал отоброзить только 2019 год, то он должен видеть вот такой результат:
id сотрудника id плантации счётчик строк timestamp Показания Площадь прироста1 17 3 2019-01-28 25 41 17 5 2019-02-28 28 31 16 6 2019-02-28 2 22 3 4 2019-01-28 30 52 3 7 2019-02-28 35 51 16 8 2019-03-28 8 6
...
Рейтинг: 0 / 0
Как вычесть строки по id плантации ?
    #39877885
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господи, воды-то... тогда как надо было: структуру таблицы (CREATE TABLE), пример данных (INSERT INTO) и результат для этих данных с объяснением, почему именно так (или два-три результата при разных параметрах выборки). А рост растений это, объём данных на харде или остаток продовольствия в кругосветке - вообще пофиг.
...
Рейтинг: 0 / 0
Как вычесть строки по id плантации ?
    #39877886
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и версию MySQL обязательно указать надо. Это важно в ТАКОЙ задаче.
...
Рейтинг: 0 / 0
Как вычесть строки по id плантации ?
    #39877945
sqlnoobie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По аналогии это один в один как с счётчиками воды, чтоб узнать расход за текущий месяц, нужно вычесть текущие показания в конце месяца от предыдущих показаний прошлого месяца, это и будет расход за текущий месяц. Вот это мне и нужно в целом и чтоб эти данные были в отдельном новом столбце.

Пример: idplant 17 = тюльпаны. Строка с idplant 17 за 28 Февраля должна быть = данные тюльпанов за Февраль (28) - данные тюльпанов за Январь (25) = 3. И так чтоб считались все месяцы.

MySQL 5.6.45

CREATE TABLE `rastenija` ( `row_ID` int(11) NOT NULL AUTO_INCREMENT, `idstaff` int(11) DEFAULT NULL, `idplant` int(11) DEFAULT NULL, `record` decimal(16,4) DEFAULT NULL, `timedata` datetime DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY `row_ID` (`row_ID`) USING BTREE) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8

INSERT INTO `rastenija` (`row_ID`, `idstaff`, `idplant`, `record`, `timedata`)
VALUES (1, 1, 17, '21.0000', '2018-12-28 20:26:13'),(2, 2, 3, '25.0000', '2018-12-28 20:30:19'),(3, 1, 17, '25.0000', '2019-01-28 20:30:37'),(4, 2, 3, '30.0000', '2019-01-28 20:30:53'),(5, 1, 17, '28.0000', '2019-02-28 20:31:31'),(6, 1, 16, '2.0000', '2019-02-28 20:31:55'),(7, 2, 3, '35.0000', '2019-02-28 20:32:16'),(8, 1, 16, '8.0000', '2019-03-28 20:33:00');
...
Рейтинг: 0 / 0
Как вычесть строки по id плантации ?
    #39877996
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если данные строго отвечают принципу "не более одной записи в месяц", то задача решается вульгарным
Код: sql
1.
2.
3.
4.
5.
SELECT *
FROM rastenija t1
LEFT JOIN rastenija t2 ON t1.idplant = t2.idplant
                      AND DATE_FORMAT(t1.timedata, '%Y%m') = DATE_FORMAT(t2.timedata + INTERVAL 1 MONTH, '%Y%m')
ORDER BY t1.idplant, t1.timedata;

fiddle

Если же возможны несколько записей за месяц - запрос будет сложнее.
...
Рейтинг: 0 / 0
Как вычесть строки по id плантации ?
    #39878529
sqlnoobie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтоб одни показания вычетались из других, так будет правильно ?

Код: plsql
1.
2.
3.
SELECT *, (t1.record - t2.record) as Result
FROM rastenija t1 LEFT JOIN rastenija t2 ON t1.idplant = t2.idplant AND DATE_FORMAT(t1.timedata, '%Y%m')
 = DATE_FORMAT(t2.timedata + INTERVAL 1 MONTH, '%Y%m') ORDER BY t1.idplant, t1.timedata 



И как это сохранить в виде таблицы, или возможно через UNION сделать INSERT INTO столбец Result в таблицу rastenija по дате или row_id. Или я коряво мыслю ? Потому как данные из Result нужны будут ещё для массы других расчётов.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как вычесть строки по id плантации ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]