Я в тупике. У меня есть таблица, которая содержит информацию о поездках за последние несколько лет для людей в моей организации. Наша цель - определить время между каждой конкретной поездкой, в которой человек находился дома «DwellAC». Поездки, возможно, не были введены в порядке. Я знаю, что мне нужно сузить поездки и выбрать самую последнюю поездку до текущей поездки линий, а затем вычесть даты. Я пытаюсь использовать самостоятельное соединение, потому что все данные находятся только в одной таблице. Это моя попытка использовать SQL для расчета задержки для каждой поездки.
UPDATE Deployments AS d1
INNER JOIN Deployments AS d2
ON d1.AC=d2.AC or d1.AC=d2.FP
SET d1.DwellAC = d1.DepartMcGuire-d2.ReturnMcGuire
WHERE d2.ReturnMcGuire<d1.DepartMcGuire And d1.AC<>'' And d1.ID<>d2.ID;
Я думал, что код работает нормально. Казалось, все правильно рассчитал. Я начал сталкиваться с проблемами, когда новые поездки были добавлены в прошлом. Это означает, что мы нашли новые данные для ввода старой поездки. Индекс на новых старых поездках выше и, кажется, отбрасывает вещи.
Сегодня утром я понял, что мне, очевидно, нужно включить больше данных. Стол выглядит так.
AC DwellAC DepartMcGuire ReturnMcGuire
Evan 1/1/2011 2/1/2011
Evan 3/10/2011 4/10/2011
Evan 1/1/2010 6/1/2010
Цель состоит в том, чтобы правильно заполнить столбец DwellAC домашним временем между поездками.
Можно ли как-нибудь использовать вложенный запрос where, чтобы найти максимальную дату <дату следующего отправления для использования в запросе на обновление? </p>
Я знаю, что псевдокод будет выглядеть так
For each AC
Select all trips where oldtrip.returnMcGuire < thistrip.departMcGuire and AC=AC
From these trips select MAX oldtrip.ReturnMcGuire
Update this.DwellAC = maxfound oldtrip.returnMcguire - thistrip.departMcGuire
Спасибо за любую помощь, я не уверен, что мне вообще нужно внутреннее соединение
Я нашел этот запрос
SELECT CurrentTrip.AC, CurrentTrip.DwellAC, CurrentTrip.FP, CurrentTrip.DepartMcGuire,
(SELECT MAX(LastTrip.ReturnMcGuire)
FROM Deployments AS LastTrip
WHERE ((CurrentTrip.AC=LastTrip.AC OR CurrentTrip.AC=LastTrip.FP) AND (LastTrip.ReturnMcGuire<CurrentTrip.DepartMcGuire))) AS LastReturnMcGuire
FROM Deployments AS CurrentTrip
Дает мне необходимые мне данные в виде CurrentTrip.DepartMcGuire-LastReturnMcGuire
Мне просто нужно превратить его в оператор обновления.
Возможно, что-то вроде этого? который не работает в
UPDATE Deployments AS CurrentTrip
SET CurrentTrip.DwellAC = CurrentTrip.DepartMcGuire-(SELECT MAX(LastTrip.ReturnMcGuire) FROM Deployments AS LastTrip WHERE CurrentTrip.AC=LastTrip.AC);