У меня есть БД, в которой дата и время - два столбца. Мне нужно получить самую последнюю (под самой последней я имею в виду запись с самым высоким временем) строку. Это используется как подзапрос для подачи другого запроса.
DB
id date time currentOdometer totalOdometer vno
1 2020-03-21 10:00 250 3001 ABCD
2 2020-03-21 09:59 249 3000 ABCD
3 2020-03-21 10:01 251 3002 ABCD
4 2020-03-21 10:02 252 3003 ABCD
Мое требование заключается в том, что, когда я получаю новую запись vno ABCD, мне нужно найти последнюю запись и манипулировать данными.
Например, Когда я получаю новую запись в 10:03, мне нужно найти последнюю запись, ie 10:02 и значение.
Мой запрос был
(SELECT Y.currentOdometer+(3200-Y.totalOdometer) FROM gps_data Y WHERE timeStamp(date,time)=(SELECT MAX(timeStamp(X.date,X.time)) from gps_data X WHERE vno= 'ABCD') AND IMEI = 'ABCD')
Этот запрос является частью оператора INSERT, подобного этому
INSERT into tbl(date, time, currentOdometer, totalOdometer, vno) VALUES ('2020-03-21', '10:03',(SELECT Y.currentOdometer+(3200-Y.totalOdometer) FROM tbl Y WHERE timeStamp(date,time)=(SELECT MAX(timeStamp(X.date,X.time)) from tbl X WHERE vno= 'ABCD') AND IMEI = 'ABCD'),3003,'ABCD')
Когда я выполняю запрос таким образом, я получаю ошибку подзапрос возвращает более одной строки.
Я сформировал запрос с LIMIT 1 в каждом из выбранных состояний mtn, а затем в
ER_LOCK_DEADLOCK: Deadlock found when trying to get lock; try restarting transaction
ER_LOCK_DEADLOCK
undefined
возникла тупиковая ситуация.