2013-12-19 35 views
0

我需要選擇頂行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 ; 
+0

難道你不能用兩個查詢來實現它嗎? – Uours

+0

我不知道我會怎麼做。我嘗試了很多不同的選擇! – Portlight

回答

0

要選擇頂行,由上至下數據集只選擇第一行:

SELECT <fields> 
FROM TABLE 
ORDER BY <your field> DESC 
LIMIT 1 ; 

因爲您在存儲過程中這樣做,你可以選擇a.scheduleType成變量,然後在where子句中使用該變量執行select。

+0

這將選擇頂行 - 我想要選擇所有行BUT根據頂行返回什麼我需要將所有行a.schedule類型設置爲錯誤 – Portlight

+0

由於您在存儲過程中這樣做,您可以在兩個步驟: 首先,您可以使用查詢將a.scheduleType選擇到變量中,然後在where子句中使用該變量執行select。 –