Как использовать SQL для создания группы с разными датами? - PullRequest
2 голосов
/ 03 марта 2010

Допустим, у меня есть таблица со следующими столбцами:

  • Кол-во, INTEGER
  • SaleDate, DATETIME

Я бы хотел увидеть этот результат:

Sold in the last 7 days | Sold in last 14 days
-----------------------------------------------------
10                      | 20

Я могу использовать предложение where, чтобы использовать между , но как мне продать кол-во в течение 7 и 14 дней?

Ответы [ 3 ]

3 голосов
/ 03 марта 2010

Фильтр в предложении WHERE для получения дней от 0 до -14. Затем агрегируйте по дням от 0 до -7 отдельно.

SELECT
   ...,
   SUM(CASE WHEN SaleDate >= DATEADD(day, -7, GETDATE()) THEN 1 ELSE 0 END) AS 7days,
   COUNT(*) AS 14days
FROM
   MyTable
WHERE
   SaleDate >= DATEADD(day, -14, GETDATE())
GROUP BY
   ...
0 голосов
/ 03 марта 2010

Проверено в MS T-SQL 2003

declare @whatever table(
    qty int,
    saledate datetime
)
insert into @whatever select 1, getdate()
insert into @whatever select 2, dateadd(dd, -1, getdate())
insert into @whatever select 2, dateadd(dd, -2, getdate())
insert into @whatever select 1, dateadd(dd, -3, getdate())
insert into @whatever select 1, dateadd(dd, -4, getdate())
insert into @whatever select 1, dateadd(dd, -5, getdate())
insert into @whatever select 1, dateadd(dd, -6, getdate())
insert into @whatever select 1, dateadd(dd, -7, getdate())
insert into @whatever select 1, dateadd(dd, -8, getdate())
insert into @whatever select 1, dateadd(dd, -9, getdate())
insert into @whatever select 2, dateadd(dd, -10, getdate())
insert into @whatever select 2, dateadd(dd, -11, getdate())

insert into @whatever select 1, dateadd(dd, -15, getdate())
insert into @whatever select 2, dateadd(dd, -16, getdate())

select
        qty,
        sum(
            case
                when datediff(dd, saledate, getdate()) between 0 and 7 then 1
                else 0
            end
        ) as [Sold in last 7 days],
        sum(
            case
                when datediff(dd, saledate, getdate()) between 0 and 14 then 1
                else 0
            end
        ) as [Sold in last 14 days]
    from
        @whatever
    group by
        qty
;
0 голосов
/ 03 марта 2010
select sum(Qty), datediff(w, getdate(), SaleDate) as Period
from table
group by  datediff(ww, getdate(), SaleDate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...