Начало весеннего сезона на SQL сервере - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь получить весенний сезон на SQL сервере.

Запрос, который я написал, касается получения всеми клиентами большей суммы счета в течение весны. Год не против Я хочу сделать что-то вроде этого:

select  
    c.clientId, c.name,
    b.billId, b.date,
    sum(b.total) as total
from 
    Client c 
join 
    Bill b on c.clientId = b.clientId
where 
    month(b.date) between 09 and 12 --when month is 09
      -- saying day(b.date) is 
      --same or greater than 21
       -- and when month is 12
        -- day(b.date) is same
         -- or less than 21
group by 
    c.clientId, c.name, b.billId, b.date, b.total 
order by
    total desc

Должно ли в 2019 году быть таким же или большим, чем «20190921 00: 00: 00.000» и таким же или меньшим, чем «20191221 23: 59: 59.000», учитывая структуру мой запрос.

Кто-нибудь может иметь решение?

1 Ответ

0 голосов
/ 08 апреля 2020

Вы можете сделать:

where
    b.date >= datefromparts(year(b.date), 9, 21)
    and b.date < datefromparts(year(b.date), 12, 21)

В вашем запросе:

select  
    c.clientId, 
    c.name,
    sum(b.total) as total
fromcClient c 
inner join bill b on c.clientId = b.clientId
where
    b.date >= datefromparts(year(b.date), 9, 21)
    and b.date < datefromparts(year(b.date), 12, 21)
group by c.clientId, c.name
order by total desc

Обратите внимание, что я исправил предложение group by, чтобы оно группировало строки для каждого клиента (у вас были отменены дополнительные столбцы в этом пункте, особенно date).

Нерелад: 21 сентября - 21 декабря - осень, а не весна. Если вы хотели Spring, то:

where
    b.date >= datefromparts(year(b.date), 3, 21)
    and b.date < datefromparts(year(b.date), 6, 21)
...