У меня есть набор необработанных данных, который выглядит следующим образом
timestamp | eventtype | status | state | FinalState | Difference |
-------------------------------------------------------------------------------|
12:00:56 PM | STATE_CHANGE | NULL | NULL | NULL | 00:00:00 |
12:01:39 PM | STATE_CHANGE | Available | CONNECTING | NULL | 00:00:00 |
Чтобы выполнить некоторые отчеты о состоянии пользователя, мне нужно обновить FinalState, а затем рассчитать разницу во времени между четными типами, используя отметку времени.
Это логика, которой необходимо следовать для обновления FinalState
IF currentrow_state == null
IF currentrow_status == NULL
return available
ELSE nextrow_status
ELSE IF ( currentrow_state == NULL OR currentrow_state == ENDED)
IF previousrow_state == currentrow_state
return nextrow_status
ELSE
return currentrow_state
ELSE
return currentrow_state
Я не совсем понимаю, как выполнить эту операцию.Я думаю, что это может быть сделано в скрипте PHP, чтобы пройти через все данные, но данные будут огромными и могут привести к тому, что время ожидания скрипта будет работать для сотен пользователей.
Я думал, что это будетразумно запускать эти манипуляции с данными внутри самой БД.В настоящее время он хранится в AWS RDS, поэтому он находится в SQL.Но я не могу понять, как это сделать, и не знаю, является ли это хорошим решением.
Есть какие-нибудь мысли о том, как это можно сделать наиболее эффективным способом?
Обновление
После следования подсказке к комментарию я получил этот запросчастично работает.Я переместил данные в другую таблицу с серийным номером
SELECT serialnumber,timestamp,username,status,state,
CASE
WHEN state = 'NULL'
THEN (CASE
WHEN status = 'NULL'
THEN "Available"
ELSE (SELECT status FROM ATEMP WHERE state IS NULL AND status IS NOT NULL AND serialnumber=1)
END)
ELSE (CASE
WHEN state = 'NULL' OR state LIKE 'ENDED'
THEN (SELECT status FROM ATEMP WHERE state IS NULL AND status IS NOT NULL AND serialnumber=1)
ELSE state
END)
END as finalvalue
FROM ATEMP;
Но я не могу получить данные из подзапроса.Сохраняет (ноль) как результаты.После еще нескольких испытаний не похоже, что запрос возвращает данные о состоянии из строки 2 в строку 1