запрос агрегации SQL - PullRequest
       3

запрос агрегации SQL

2 голосов
/ 17 декабря 2009

У меня есть таблица с 2 столбцами, столбцом даты и столбцом int, и я хочу суммировать столбцы int за месяц, где месяц начинается 15-го

Таким образом, первый результат будет с сегодняшнего дня до 15 следующего месяца (январь), следующий ряд будет с 16 января по 15 февраля и т. Д., Пока в первом столбце не останется больше дат

Имеет смысл?

EDITED !!!

Извините, я объясню, что я имею в виду лучше. Месяц определяется с 15-го числа одного месяца до 14-го числа следующего месяца. Первый месяц в результатах будет с сегодняшнего дня до 14-го числа, где 14-е может быть днем ​​или через 3 недели и т. Д. Второй месяц будет до 14-го числа следующего месяца. Последний месяц в результате будет с 15-го числа до конечной даты в таблице, поэтому возможно, что последний месяц может составлять 2 дня данных

лучше?

Я сейчас посмотрю ответы

Ответы [ 2 ]

1 голос
/ 17 декабря 2009

Итак, вы хотите, чтобы месяц считался месяцем, который на месяц позже, чем четырнадцать дней назад. Итак, с сегодняшнего дня (17 декабря) мы возвращаемся на 14 дней к 3 декабря, а затем добавляем месяц, чтобы сделать его 3 января. Таким образом, сегодня считается январь.

Обычный метод усечения месяца - DATEADD(month, DATEDIFF(month, 0, someDate), 0). Я воспользуюсь этим, но сначала возьму четырнадцать выходных и добавлю один, когда добавлю месяц.

SELECT 
    DATEADD(month, 1+DATEDIFF(month, 0, DATEADD(day, -14, yourDate)),0) as theMonth, 
    SUM(yourInt) as Total
FROM yourTable
GROUP BY DATEADD(month, 1+DATEDIFF(month, 0, DATEADD(day, -14, yourDate)),0);

Удачи в этом ... вы можете начать с чего-то простого, например:

SELECT 
    DATEADD(month, 1+DATEDIFF(month, 0, DATEADD(day, -14, yourDate)),0) as theMonth
    , *
FROM yourTable

... чтобы вы могли понять логику расчета месяца.

0 голосов
/ 17 декабря 2009

Как упоминалось ранее, вы должны сгруппировать по выражению, которое создает сегменты, определенные календарным месяцем

  Select dateadd(month, datediff(month, 0, datecol-14), 0 ) CalendarMonth, 
        sum(col) Total
  From Table
  Group By dateadd(month, datediff(month, 0, datecol-14), 0)

Выражение dateadd(month, datediff(month, 0, datecol-14), 0) всегда будет генерировать дату полуночи, первое число месяца, в котором была дата 14 дней назад ...

ПРИМЕЧАНИЕ. Группировка по выражениям или выражениям должна совпадать и включать все выражения в предложении select, которые не являются агрегатными функциями

РЕДАКТИРОВАТЬ: Это выражение создает сегменты по месяцам, с 15 по 14 числа следующего месяца, но описывает сегменты, используя дату первого месяца в интервале начинается в. т. е. генерирует дату первого числа месяца, в котором начинается корзина ... например, любая дата с 15 ноября по 14 декабря даст вам 1 ноября, любая дата с 15 декабря по 14 января даст вам 1 декабря и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...