我必须编写一条update语句来更新数据库表中的一串值。
首先是一个简单的介绍。我们的客户来自运输和物流行业。他们在需要建筑材料的人和那些拥有运输公司并提供运输服务的人和卡车司机之间提供运输(建筑材料)服务。
司机可以得到询问,在那里他需要做一些送货和取货。例如,一次查询可以由三次浏览组成。他可以开始巡视,拾取材料,交付材料,拾取废物(在他投放材料的同一建筑工地),开始新的分团,交付废物,拾取材料,开始新的分团,交付材料和子分团,最后结束整个巡演。
还有websocket,它可以探测司机的位置(移动客户端),并在tour_log表中记录经度和纬度。因此,每30秒就会跟踪一次位置。
在图中,您可以看到该表的一部分是什么样子。该表有超过一百万条记录。

当驱动程序完成子巡视时,web (spring-boot)服务不会保存到该驱动程序结束的子巡视(SUBTOUR_END)的数据库中。我更新了该服务,但我们的客户,将需要一些报告的旅游和查询一些较早的时期。我需要执行更新才能完成报告功能。
所以,说到要点。我确实有一个明显不起作用的查询。我不能同时更新正在查询数据的表。
UPDATE tour_log
SET tour_id = (SELECT tour_id FROM tour_log A
WHERE tour_log_id = (SELECT (tour_log_id)
FROM tour_log B
WHERE tour_id IS NULL AND log = "SUBTOUR_END" AND A.tour_log_id = B.tour_log_id - 1))
WHERE log = "SUBTOUR_END" AND tour_id is null AND inquiry_id = 7519646; -- I'm doing update for single inquiry only有没有人能给我个提示,告诉我该怎么做?
发布于 2021-06-18 16:13:43
测试
UPDATE tour_log t1
JOIN tour_log t2 ON t1.truck_id = t2.truck_id
AND t1.tour_log_id > t2.tour_log_id
LEFT JOIN tour_log t3 ON t1.truck_id = t3.truck_id
AND t1.tour_log_id > t3.tour_log_id
AND t3.tour_log_id > t2.tour_log_id
SET t1.tour_id = t2.tour_id
WHERE t1.log = 'SUBTOUR_END'
AND t3.tour_log_id IS NULL例如,从前一个相邻行复制tour_id到带有'SUBTOUR_END'的行(t3用于检查它们之间是否没有行)。
用于排序的是tour_log_id,而不是timestamp,因为最后一个可能有重复项。
https://stackoverflow.com/questions/68031486
复制相似问题