MySQL - получить последнюю запись, когда дата и время являются двумя полями - PullRequest
0 голосов
/ 21 марта 2020

У меня есть БД, в которой дата и время - два столбца. Мне нужно получить самую последнюю (под самой последней я имею в виду запись с самым высоким временем) строку. Это используется как подзапрос для подачи другого запроса.

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
возникла тупиковая ситуация.
...