Дата группировки SQL по месяцам - PullRequest
7 голосов
/ 24 февраля 2011

У меня есть запрос, который возвращает даты истечения срока действия:

    SELECT ci.accountnumber
           , ci.accountname
           , cvu.ExpirationDate
      FROM dbo.clientinfo ci
INNER JOIN clientvehicleunit cvu ON ci.clientid = cvu.clientid

Даты истечения срока действия могут быть в любое время в течение любого месяца и любого года.истекает в течение каждого месяца в течение 12 месяцев ....

Понятия не имею, как бы я это сделал?

Ответы [ 2 ]

18 голосов
/ 24 февраля 2011

Вы можете сделать что-то вроде этого:

например, сколько единиц должно истечь в 2012 году:

SELECT MONTH(cvu.ExpirationDate) AS Mnth, YEAR(cvu.ExpirationDate) AS Yr, 
    COUNT(*) AS DueToExpire
FROM clientvehicleunit cvu
WHERE cvu.ExpirationDate >= '20120101' AND cvu.ExpirationDate < '20130101'
GROUP BY MONTH(cvu.ExpirationDate), YEAR(cvu.ExpirationDate)
1 голос
/ 24 февраля 2011

Мне нужно вернуть счет того, сколько единиц должно истечь в течение каждого месяца в течение 12-месячного периода.

Если вы имеете в виду, начиная с текущего месяца, то

SELECT
    [YYYY.MM]    = CONVERT(varchar(7), cvu.ExpirationDate, 102),
    CountInMonth = COUNT(*)
FROM dbo.clientinfo ci
JOIN clientvehicleunit cvu ON ci.clientid = cvu.clientid
WHERE cvu.ExpirationDate >= DATEADD(m, DATEDIFF(m,0,getdate()), 0)
  AND cvu.ExpirationDate <  DATEADD(m, DATEDIFF(m,0,getdate())+12, 0)
GROUP BY CONVERT(varchar(7), cvu.ExpirationDate, 102)
ORDER BY [YYYY.MM]

Примечание: период печатается в форме [ГГГГ.ММ], например, 2011.01

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