2015-04-24 2 views
1

Я пытаюсь для того чтобы достигнуть это calculateing некоторых статистического Howewer я имею Даты в почте таблицу на неделе <, но мне нужно, чтобы показать статистику за месяц/Рассчитать SUM по дате с неделей и месяцем трюком SQL

, например, в Таблица i имеет это

'20130226', 312.00 
'20130305', 833.00 

Неделя, которая заканчивается на 20130305, имеет 2 дня в феврале и 5 марта. Я пытаюсь достичь:

2013-02-28 550.000000 
2013-03-31 2285.000000 

У меня есть этот запрос:

CREATE TABLE #Old 
    (
    Weeks DATE, 
    summ NUMERIC (12,6)  
) 
     INSERT INTO #Old VALUES ('20130226', 312.00) 
     INSERT INTO #Old VALUES ('20130305', 833.00) 
     INSERT INTO #Old VALUES ('20130312', 225.00) 
     INSERT INTO #Old VALUES ('20130319', 453.00) 
     INSERT INTO #Old VALUES ('20130326', 774.00) 



SELECT 
    EOMONTH (Weeks ) 
    , sum (summ) as cumesum 
    FROM #Old 
    GROUP BY EOMONTH (Weeks ) 

Я знаю его не так, потому что его не разделив на этой неделе в течение двух месяцев, но нет идей, как ее достичь.

+1

Вы знаете, что расщепление агрегированных данных не даст вам точные результаты, не так ли? У вас все еще есть базовые данные для работы? –

ответ

1

Если я правильно понимаю, вы хотите выделить недельные числа по месяцам. Один из подходов состоит в разделении данных между текущим месяцем и предыдущим месяцем - выполнение распределения как арифметики по значению.

Остальное просто агрегация:

select EOMonth(weeks), sum(month_summ) 
from ((select weeks, year(weeks) as yy, month(weeks) as mm, 
       (case when day(weeks) >= 7 then summ 
        else summ * day(weeks)/7.0 
       end) as month_summ 
     from #old o 
    ) union all 
     (select dateadd(month, -1, weeks) as weeks, 
       year(dateadd(month, -1, weeks)) as yy, 
       month(dateadd(month, -1, weeks)) as mm, 
       summ * (1 - day(weeks)/7.0) 
     from #old o 
     where day(weeks) < 7 
    ) 
    ) 
group by EOMonth(weeks); 
+0

его T-SQL, и, честно говоря, это не так, потому что я должен показать месяц как последний день месяца, как этот '2013-03-31' – Andrey

+0

@ Andrey. , , Это очень небольшое изменение в запросе, которое я только что сделал. –

+0

Должен ли переигрывать его, но, скорее всего, ваш пример работы для MySQl, но эта структура не работала для MSSQL? Я сделал это через CTE – Andrey

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