Артем Л.
11416 повідомлень
#10 років тому
Столкнулся с непосильной задачей, хотя вроде и вполне тривиальной.
Не подскажете как правильно сделать?

Есть табличка с денежными операциями:
id - int(11)
op_date - int(11) - дата операции
op_sum - float - сумма, на которую была совершена операция

Мне надо вывести табличку по месяцам и денежную сумму, которая была проведена в каждом месяце, т.е.:
11.2013 - 100000.00
12.2013 - 200000.00
01.2014 - 300000.00
02.2014 - 400000.00

Пробую делать что-то типа:

SELECT DATE_FORMAT(op_date, '%m.%Y') as odate, sum(op_sum) FROM `table` GROUP BY odate


Но что-то не совсем понятно как это работает, причем не правильно работает, выдается что-то вроде того, что на скрине. Нулевой месяц какой-то, суммы совершенно не правильные и нет некоторых месяцев. В общем полный бардак. 

Подскажите пожалуйста как лучше решить подобную задачу и что б не сильно тормозило?
Додатки:
  • 13 КБ
Елена Б.
6863 повідомлення
#10 років тому
С функциями типа DATE_FORMAT вообще боюсь работать. Странные они, по какому-то своему феншую действуют. 
Можно дамп таблицы, чтоб поколдовать? 
Артем Л.
11416 повідомлень
#10 років тому
Дамп к сожалению дать не могу, проект рабочий, а вот совету буду очень рад в какую сторону копать)
Елена Б.
6863 повідомлення
#10 років тому
Op_date в timestamp перевести. Вдруг поможет?
Сергей З.
39 повідомлень
#10 років тому
В общем-то всё верно. NULL в датах, потому что где-то неправильные timestampы. Да и суммы должны быть нормальные, если их обрезать до 2 знаков после запятой.
Елена Б.
6863 повідомлення
#10 років тому
mrGracer, неа, суммы были косячные из-за неправильного преобразования дат - группа получалась не за месяц, а за фиг знает шо ))
Артем Л.
11416 повідомлень
#10 років тому
Спасибо floppox за решение проблемы, нужно было всего-то добавить в запрос FROM_UNIXTIME. Очень выручила)))
Елена Б.
6863 повідомлення
#10 років тому
Застеснял