2015-09-03 7 views
1

Я пытаюсь использовать предложение where во временной таблице. На самом деле я использовал его, но результаты не соответствуют действительности. пытаясь найти продукты между двумя датами, но когда я использую предложение where, он не получает данных.Использовать предложение where во временной таблице

CREATE TABLE #TEMPCOZGU 
(
    ROW INT, 
    TEZGAH VARCHAR(50), 
    COZGU VARCHAR(50), 
    PERSONEL VARCHAR(50), 
    DATE DATETIME, 
    FIRE INT, 
    FIRE_METRE NUMERIC(25,6) 
) 
    INSERT INTO #TEMPCOZGU 

select row_number() over(order by TEZGAH) AS ROW, TEZGAH, COZGU, PERSONEL, TARIH, FIRE, FIRE_METRE 
from cozgu_fırelerı 
where tezgah = 'M01' and cozgu = 'SAĞ ALT BAĞLANTI' 



SELECT T1.TEZGAH, T1.COZGU, T1.PERSONEL,T1.FIRE, T1.FIRE_METRE, t1.DATE, T2.DATE AS PREVIOUSDATE, ISNULL(DATEDIFF(DAY, T2.DATE, T1.DATE), 0) AS GUNFARKI , SUM(MKARE) AS TOPLAMMKARE 
FROM #TEMPCOZGU as t1 
left outer join #TEMPCOZGU as t2 on t1.row-1 = t2.row 
left outer join HALI_TEZGAH AS TE ON T1.TEZGAH = TE.TEZGAH_NO 
LEFT OUTER JOIN HALI_GUNLUK_URETIM AS U ON U.TEZGAH = TE.ID 
--WHERE U.TARIH BETWEEN T1.TARIH AND T2.TARIH 
GROUP BY T1.TEZGAH, T1.COZGU, T1.PERSONEL, T1.DATE,T1.FIRE, T1.FIRE_METRE, T2.DATE 

drop table #TEMPCOZGU` 
+0

Переместить условия WHERE в положение ON, чтобы получить истинное поведение LEFT JOIN. (Так как теперь он выполняется как внутреннее соединение ...) – jarlh

+0

, когда вы сравнивали дату или дату, вы должны быть осторожны во времени. например в SQL Дата 09/03/2015 считает 09-03-2015 00:00:00, где мы ожидаем 09-03-2015 23:59:59 –

+0

Я также попытался переместиться туда, где условие включено. но на этот раз он получил нуль. Но, конечно, значение не должно быть пустым –

ответ

0

Если значения DateTime всегда есть время, чтобы установить «00:00:00», попробуйте

SELECT T1.TEZGAH, T1.COZGU, T1.PERSONEL,T1.FIRE, T1.FIRE_METRE, t1.DATE, T2.DATE AS PREVIOUSDATE, ISNULL(DATEDIFF(DAY, T2.DATE, T1.DATE), 0) AS GUNFARKI , SUM(MKARE) AS TOPLAMMKARE 
FROM #TEMPCOZGU as t1 
left outer join #TEMPCOZGU as t2 on t1.row-1 = t2.row 
left outer join HALI_TEZGAH AS TE ON T1.TEZGAH = TE.TEZGAH_NO 
LEFT OUTER JOIN HALI_GUNLUK_URETIM AS U ON U.TEZGAH = TE.ID 
WHERE U.TARIH >= T1.TARIH AND U.TARIH < DateADD (T2.TARIH, INTERVAL 1 DAY) 
GROUP BY T1.TEZGAH, T1.COZGU, T1.PERSONEL, T1.DATE,T1.FIRE, T1.FIRE_METRE, T2.DATE 

Если это не так, то ваш между должны работали в первую очередь.

+0

Отредактировано для MySQL :) –