Итак, у меня есть 2 стола, communication
и movement
.SQL - Зацикливание через строку таблицы в mysql?
communication
имеет столбцы fromID
, timestamp
, который имеет идентификатор вызывающего абонента и время вызова. Затем у меня есть другая таблица movement
, которая имеет ID
, timestamp
, x
, y
, у которого есть идентификатор человека, его местоположение (x,y)
и время, когда они находятся в этом месте.
Я хочу написать запрос, который выглядит примерно так:
For every single row of communication(R)
SELECT * FROM movement m
WHERE m.ID = R.fromID && m.timestamp <= R.timestamp
ORDER BY timestamp
В принципе, что это делает, найти ближайший movement timestamp
для данного communication timestamp
. После этого, в конце концов, я хочу найти местоположение (x,y)
вызова, основанного на данных movement
.
Как мне это сделать? Я знаю, что существует основанный на наборе подход, но я не хочу так поступать. Я заглянул в cursors
, но у меня такое ощущение, что производительность ужасна в этом ... так что все равно нужно сделать это с помощью цикла? Я по существу хочу Перебери каждую строку communication
, и получить результат ...
Я пытался что-то вроде этого:
DELMITER $$
CREATE PROCEDURE findClosestTimestamp()
BEGIN
DECLARE commRowCount DEFAULT 0;
DECLARE i DEFAULT 0;
DECLARE ctimestamp DEFAULT 0;
SELECT COUNT(*) FROM communication INTO commRowCount;
SET i = 0;
WHILE i < commRowCount DO
SELECT timestamp INTO ctimestamp FROM communication c
SELECT * FROM movement m
WHERE m.vID = c.fromID && m.timestamp <= R.timestamp
END$$
DELIMITER ;
Но я знаю, Thats совершенно неправильно ... Это единственный способ делать это курсоры ??? Я просто не могу найти пример этого в любом месте в Интернете, и я совершенно не знаком с процедурами в SQL. Любое руководство будет принята с благодарностью, спасибо!
"Я знаю, что есть набор на основе но я не хочу так поступать ». Почему нет? Что такое РСУБД? –
Ну, у меня уже есть версия на основе набора ... но я не должен делать это в формате, основанном на наборе, к сожалению. – ocean800
@ ocean800 Вам нужно только один ряд («ближайший») от движения? – Barranka