Мне нужно выбрать верхнюю строку AND l1.activityId = t2.activityId Затем мне нужно иметь возможность установить ВСЕ строки a.scheduleType равными 'error '- не только строки, в которых указано выше. В настоящее время я могу изменить значение, основанное на результатах каждой строки l1.activityId = t2.activityId, но это не поможет мне в отношении всех результатов, которые мне нужны.Нужно установить все значения строк на основе результатов верхней строки
CREATE PROCEDURE reportFreeCoolingTrackerNoErrors (
IN fromDate varchar (50),
IN toDate varchar (50),
IN timeZone varchar (50))
BEGIN
DECLARE startDate varchar (50);
DECLARE endDate varchar (50);
DECLARE mylogID Int;
SET startDate = FROM_UNIXTIME(fromDate/1000);
SET endDate = FROM_UNIXTIME(toDate/1000);
SELECT
l1.item31985,l1.item31987,a.scheduleType,
((l1.item31985 - l1.item31987)*(time_to_sec(timediff(t2.completed, l1.completed))))/3600 AS kwDifference,
((l1.item31985 - l1.item31987) * (substr(l.details, instr(l.details , ':') +1))) AS cost,
(((l1.item31985 - l1.item31987) * (substr(l.details, instr(l.details , ':') +1)))
*(time_to_sec(timediff(t2.completed, l1.completed))/3600)) AS costT,
time_to_sec(timediff(t2.completed, l1.completed))/3600 AS coolingHours,
time_to_sec(timediff(endDate, startDate))/3600 AS totalTimeRange,
(CONVERT_TZ((FROM_UNIXTIME(fromDate/1000)),'UTC', timeZone))AS startingDate,
(CONVERT_TZ((FROM_UNIXTIME(toDate/1000)),'UTC', timeZone)) AS endingDate,DATABASE() AS databaseName,
CASE
when l1.activityId = t2.activityId THEN 1
ELSE 0
END AS errorCheck
FROM logs l
INNER JOIN groups g ON g.groupId = l.groupId
LEFT JOIN groups g1 ON g.parentId = g1.groupId
LEFT JOIN groups g2 ON g1.parentId = g2.groupId
LEFT JOIN groups g3 ON g2.parentId = g3.groupId
INNER JOIN activities a ON l.logId = a.logId
INNER JOIN log1644 l1 ON a.activityId = l1.activityId
INNER JOIN log1644 t2 ON t2.recordId = l1.recordid + 1
INNER JOIN items i ON l.logId = i.logId AND i.name LIKE '%KW%'
INNER JOIN users u ON l1.userId = u.userId AND i.name LIKE '%KW%'
WHERE i.itemID = "31985" AND l1.activityId = 1257
AND l1.started
BETWEEN startDate
AND endDate
ORDER BY l1.recordId,l1.started;
END //
DELIMITER ;
Не могли бы вы использовать два запроса для его достижения? – Uours
Я не уверен, как бы я это сделал. Я пробовал много разных вариантов! – Portlight