Преобразование SQL-запроса для удаления из него оконной функции

#android #mysql #sql #android-room

Вопрос:

Использование библиотеки комнат Android для локального хранения. У меня есть ниже запрос от бэкенда, чтобы реализовать его в приложении для Android.

 select DISTINCT timeStamp, batteryId, status 
from (select batteryDetails.*, 
             lag(status) over (partition by batteryId order by timeStamp) as oldStatus
      from batteryDetails) batteryDetails 
where status is null 
   or oldStatus <> status
 

Выполнив вышеуказанный запрос, я получаю :

ошибка: на входе нет жизнеспособной альтернативы » (выберите batteryDetails.*, задержка(статус) («общедоступный абстрактный java.lang.Объект getHistoryEventsData(@org.jetbrains.аннотации.NotNull()

Так как мы не можем использовать оконные функции, используя комнату в Android, т. Е. Оконные функции, подобные тем, которые используются в приведенном выше запросе : (задержка и т.д.)

Я должен удалить его и должен упростить этот запрос. Пожалуйста, ведите. Спасибо.

Комментарии:

1. Пожалуйста, предоставьте примеры данных, желаемые результаты и четкое объяснение того, что вы хотите, чтобы запрос выполнялся.

Ответ №1:

Вы можете lag() заменить соответствующим подзапросом:

 select distinct timeStamp, batteryId, status 
from (select bd.*, 
             (select bd2.status
              from batteryDetails bd2
              where bd2.batteryId = bd.batteryId
              order by timeStamp
              limit 1
             ) as oldStatus
      from batteryDetails bd
     ) bd 
where status is null or oldStatus <> status;