0
我需要從具有不同條件的表中檢索日期,並將每個不同的數據與總和放在不同的列中。大量的測試後,我有這個疑問,但它的速度太慢,太大了,它不是檢索所有單位:從不同條件的相同表中檢索不同的值
SELECT cal.dt, cal.h, a.measure, b.measure, c.measure, d.measure, e.measure, f.measure, g.measure, h.measure, ud.unit_name
FROM calendar cal
LEFT JOIN (SELECT date_bid, hour, ROUND(SUM(measure),3) as measure, id_unit, id_agent FROM MEASURES
WHERE sesion = 0 AND date_bid BETWEEN '02/27/2013' AND '02/28/2013' GROUP BY date_bid, hour, id_unit, id_agent) a
ON a.date_bid = dt AND a.hour = h
LEFT JOIN (SELECT date_bid, hour, ROUND(SUM(measure),3) as measure, id_unit, id_agent FROM MEASURES
WHERE sesion = 1 AND date_bid BETWEEN '02/27/2013' AND '02/28/2013' GROUP BY date_bid, hora, id_unit, id_agent) b
ON b.date_bid = dt AND b.hour = h AND a.id_unit = b.id_unit AND a.id_agent = b.id_agent
LEFT JOIN (SELECT date_bid, hour, ROUND(SUM(measure),3) as measure, id_unit, id_agent FROM MEASURES
WHERE sesion = 2 AND date_bid BETWEEN '02/27/2013' AND '02/28/2013' GROUP BY date_bid, hour, id_unit, id_agent) c
ON c.date_bid = dt AND c.hour = h AND a.id_unit = c.id_unit AND a.id_agent = c.id_agent
LEFT JOIN (SELECT date_bid, hour, ROUND(SUM(measure),3) as measure, id_unit, id_agent FROM MEASURES
WHERE sesion = 3 AND date_bid BETWEEN '02/27/2013' AND '02/28/2013' GROUP BY date_bid, hour, id_unit, id_agent) d
ON d.date_bid = dt AND d.hour = h AND a.id_unit = d.id_unit AND a.id_agent = d.id_agent
LEFT JOIN (SELECT date_bid, hour, ROUND(SUM(measure),3) as measure, id_unit, id_agent FROM MEASURES
WHERE sesion = 4 AND date_bid BETWEEN '02/27/2013' AND '02/28/2013' GROUP BY date_bid, hour, id_unit, id_agent) e
ON e.date_bid = dt AND e.hour = h AND a.id_unit = e.id_unit AND a.id_agent = e.id_agent
LEFT JOIN (SELECT date_bid, hour, ROUND(SUM(measure),3) as measure, id_unit, id_agente FROM MEASURES
WHERE sesion = 5 AND date_bid BETWEEN '02/27/2013' AND '02/28/2013' GROUP BY date_bid, hour, id_unit, id_agent) f
ON f.date_bid = dt AND f.hour = h AND a.id_unit = f.id_unit AND a.id_agent = f.id_agent
LEFT JOIN (SELECT date_bid, hour, ROUND(SUM(measure),3) as measure, id_unit, id_agente FROM MEASURES
WHERE sesion = 6 AND date_bid BETWEEN '02/27/2013' AND '02/28/2013' GROUP BY date_bid, hour, id_unit, id_agent) g
ON g.date_bid = dt AND g.hour = h AND a.id_unit = g.id_unit AND a.id_agent = g.id_agent
LEFT JOIN (SELECT date_bid, hour, ROUND(SUM(measure),3) as measure, id_unit, id_agent FROM MEASURES
WHERE sesion = 7 AND date_bid BETWEEN '02/27/2013' AND '02/28/2013' GROUP BY date_bid, hour, id_unit, id_agent) h
ON h.date_bid = dt AND h.hour = h AND a.id_unit = h.id_unit AND a.id_agent = h.id_agent
INNER JOIN FACILITIES ud ON a.id_unit = ud.id_unit
WHERE cal.dt BETWEEN '02/27/2013' AND '02/28/2013' AND a.id_agent = 42
--GROUP BY a.date_bid, a.hour, ud.unit_name
ORDER BY cal.dt, ud.unit_name, cal.h
我試着用面前的桌子之間直接加入無子查詢而是因爲它沒有工作每個sesion
可以有不同數量的結果。
現在的問題是,除了這個查詢需要大量時間之外,現在的問題是僅檢索出現在第一個子查詢(sesion = 1
)上的單元的數據,並且當單元中沒有數據時,是沒有顯示其餘的數據。
我認爲應該有更好的方法來面對這個查詢。
謝謝,但此查詢需要爲我的檢索數據的同時,仍然有問題有關不採取一些單位(檢索相同的結果我查詢) – SysDragon