Подскажите алгоритм решения задачки Есть таблица с действиями по электросчетчику
Дата действия Действие
02.01.2017 Снятие показаний
04.01.2017 Отключение
01.02.2017 Снятие показаний
15.02.2017 Подключение
20.03.2017 Снятие показаний
20.04.2017 Снятие показаний
25.04.2017 Снятие показаний
20.05.2017 Снятие показаний
21.05.2017 Снятие показаний
21.06.2017 Снятие показаний
мне надо для расчета брать показания когда счетчик подключен, т.е. как-то игнорировать
04.01.2017 Отключение
01.02.2017 Снятие показаний
вот как сделать выборку между статусами подключен/отключен?
Навскидку так:
SELECT t1.*
FROM (SELECT *
FROM table
WHERE Action = 'Снятие показаний') t1
INNER JOIN (SELECT date
FROM table
WHERE Action = 'Подключение') t2 ON t1.date > t2.date
LEFT JOIN (SELECT date
FROM table
WHERE Action = 'Отключение') t3 ON t1.date > t3.date
AND t3.date > t2.date
WHERE t3.date IS NULL
select *
from (
select date, status,
@state:=@state+(
case status when 'Отключение' then 1
when 'Подключение' then -1
else 0 end
) state
from Tab, (select @state:=0) x
order by date
) x
where state=0
Для MySQL 8.0 конструкцию с переменной можно заменить на оконную функцию с куммулятивной суммой по такому же case.
Смотрим в каждой строке на значение прошлой и принимает решение, - будут ли эта и следующие строки полезными, или бесполезными. В конечном счёте оставляем только полезные.
select action_date, action_type
from (
select
action_date,
action_type,
case
when action_type = 'Подключение' then @is_useful := 1
when action_type = 'Отключение' then @is_useful := 0
end case_matrix,
@is_useful current_useful
from (
select *
from (
select '02.01.2017' action_date, 'Снятие показаний' action_type union all
select '04.01.2017', 'Отключение' union all
select '01.02.2017', 'Снятие показаний' union all
select '15.02.2017', 'Подключение' union all
select '20.03.2017', 'Снятие показаний' union all
select '20.04.2017', 'Снятие показаний' union all
select '25.04.2017', 'Снятие показаний' union all
select '20.05.2017', 'Снятие показаний' union all
select '21.05.2017', 'Снятие показаний' union all
select '21.06.2017', 'Снятие показаний'
) raw_data
order by action_date
) ordered_data
join (select @is_useful := 0) useful_flag
) useful_data
where current_useful = 1
Начальное значение флага is_useful отвечает за первые строки таблицы (у которых нет ведущей записи про подключаем/отключаем).
action_date action_type
1 15.02.2017 Подключение
2 20.03.2017 Снятие показаний
3 20.04.2017 Снятие показаний
4 20.05.2017 Снятие показаний
5 21.05.2017 Снятие показаний
6 21.06.2017 Снятие показаний
7 25.04.2017 Снятие показаний
Виртуальный выделенный сервер (VDS) становится отличным выбором
есть группа папок внутри которых есть html файлЕсть ярлык на определенный html и размещен вне папок
В проекте Django на Visual Studio 2017 контент-текст html-файлов работает только на латинницеПри смене на кириллицу - выдает ошибку кодировки
Не могу найти документацию по компоненту microsoft RDP control, хотелось бы изучить и понять как пользоваться этим