2015-12-27 2 views
1

У меня есть таблица расходов, из которой я пытаюсь вытащить несколько расчетных значений. Я начал здесь с самого легкого, который «сегодня». Моя цель - запросить нужные мне данные из таблицы с соответствующими соответствующими таблицами, а затем запросить одну и ту же родительскую таблицу с разными диапазонами дат. У меня есть запрос для этого, но результаты todaytotal неправильны ... Я вычисляю дату неправильно, как-то как-то или что-то критическое? Благодаря!Левый Присоединиться к той же таблице с диапазоном дат

все это

SELECT e.id AS exid, SUM(e.amount) AS grandtotal, e.note, e.edate, e.x1id, e.x5id, e.type, e.CreateDate, e.CreateID, e.CreateIP, 
r.name AS typename, u.fname, u.lname, ev.name as eventname, SUM(etoday.amount) AS todaytotal 
FROM 08_00_main e /* expense table */ 

LEFT JOIN 08_00_main etoday /* should only contain values with todays date */ 
ON DATE(etoday.edate) = DATE(NOW()) 

LEFT JOIN 98_00_main r /* reference table with the names of the expense types */ 
ON r.parid = 16 
AND r.tier = 3 
AND r.intid = e.type 

LEFT JOIN 01_00_main u /* user table */ 
ON u.id = e.x1id 

LEFT JOIN 05_00_main ev /* events table - expenses can be linked to an event */ 
ON ev.id = e.x5id 

WHERE e.active = 1 

GROUP BY e.type 
ORDER BY e.type 

EDIT Добавление мои результаты/макет для облегчения понимания

Вот таблица, как он сидит, базы данных, прежде, чем запрос. enter image description here

А вот то, что выше запрос возвращает enter image description here

+2

Ваш запрос связывается с каждым полем, которое не входит в функцию 'aggregate', а не только yo ur column 'type'. Это может быть причиной того, что вы получаете разные результаты, чем ожидалось в 'todaytotal'. Для дальнейшей помощи некоторые данные, текущая и ожидаемая продукция будут очень полезны. –

+0

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

ответ

1

Это проблема, так как это эффективно соединяет каждую строку е с строки 4 etoday:

LEFT JOIN 08_00_main etoday /* should only contain values with todays date */ 
ON DATE(etoday.edate) = DATE(NOW()) 

Я думаю, что вы хотите сделать это вместо этого:

LEFT JOIN 08_00_main etoday /* should only contain values with todays date */ 
ON DATE(etoday.edate) = DATE(NOW()) AND etoday.id = e.id 
+0

Вы на 100% верны. Спасибо! Ответный гениальный ответ. Я не думал об этом. Ты мой герой сегодня. Еще раз спасибо! – b3tac0d3

Смежные вопросы