Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подсчет данных за месяц назад, с разбиением по дням месяца  [new]
S.T.
Member

Откуда:
Сообщений: 21
Добрый день, прошу помочь со следующей проблемой:
Нужно подсчитать количество строк за период - месяц назад от рассматриваемого дня. Эти данные нужны по каждому дню месяца.
Т.е. вывести данные в таком формате:

Месяц День Кол-во
8 1 300 шт за периодн (01.07.12 - 01.08.12)
8 2 200 шт за периодн (02.07.12 - 02.08.12)
8 3 300 шт за периодн (03.07.12 - 03.08.12)
и т.д
Как можно задать такое условие?
Пока только считал вручную используя - where datetimestart between dateadd(m, -1, '2012.07.07 23:59:59') and '2012.07.07 23:59:59'
6 авг 12, 13:22    [12967696]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет данных за месяц назад, с разбиением по дням месяца  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2996
таблица дней (есди нужны данные за дни, когда не было данных) + group by ?
6 авг 12, 13:29    [12967742]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет данных за месяц назад, с разбиением по дням месяца  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
HandKot
таблица дней (есди нужны данные за дни, когда не было данных) + group by ?
Нет, GROUP BY не при чём.
Коррелированный подзапрос в списке полей SELECTа или OUTER APPLY во FROMе.

Видите, в примере - "ползущий с шагом 1 день" период расчёта - 1 месяц?

Вопрос к ТС: постоянна ли продолжительность месяца?
Разве в этом не заложена потенциальная ошибка в расчётах?
6 авг 12, 13:37    [12967782]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет данных за месяц назад, с разбиением по дням месяца  [new]
kain111
Member

Откуда:
Сообщений: 226
select  DAY(date) as [day of month],col from table where date  between (getdate() and DATEADD(DD,-1,getdate()) group by [day of month])

как то так. синтаксис возможно с ошибками, но основные функции для работы с датами для твоей задачи я указал. и порядок их использования в конструкции
6 авг 12, 13:45    [12967829]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет данных за месяц назад, с разбиением по дням месяца  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
как-то так
select dateadd(month, num.number - 1, '01-01-2012'), t.total 
from (select distinct number
      from master..spt_values
      where number between 1 and 12) num
  outer apply (
      select MONTH([ModifiedDate]) as [month], SUM([LineTotal]) total
      from [AdventureWorks2008R2].[Purchasing].[PurchaseOrderDetail]
      where YEAR([ModifiedDate]) = 2012 and MONTH([ModifiedDate]) = number
      group by MONTH([ModifiedDate])
    ) t
6 авг 12, 20:23    [12971015]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет данных за месяц назад, с разбиением по дням месяца  [new]
S.T.
Member

Откуда:
Сообщений: 21
[quot iap]
HandKot
Вопрос к ТС: постоянна ли продолжительность месяца?
Разве в этом не заложена потенциальная ошибка в расчётах?

Да, по идее продолжительность месяца должна меняться в зависимости от месяца в промежутке которого большее кол-во рассчитываемых дней, но пока до етого я еще не дошел)
7 авг 12, 13:45    [12975060]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет данных за месяц назад, с разбиением по дням месяца  [new]
S.T.
Member

Откуда:
Сообщений: 21
iap, stimpi, спасибо за оператор apply, буду разбираться.
7 авг 12, 13:47    [12975091]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить