Sql 根据售出的第一个月计算物品数量
我有一个订单列表,以及每个订单中销售的物品列表 然而,我只想计算在第一个月内出售的物品,这些物品是待售的。这通常通过查看项目出现的最短日期来解决 下面是一些示例代码Sql 根据售出的第一个月计算物品数量,sql,sql-server,tsql,sql-server-2016,Sql,Sql Server,Tsql,Sql Server 2016,我有一个订单列表,以及每个订单中销售的物品列表 然而,我只想计算在第一个月内出售的物品,这些物品是待售的。这通常通过查看项目出现的最短日期来解决 下面是一些示例代码 DECLARE @sales table( itemnumber int, saledate date, ordid int) INSERT INTO @sales VALUES(43029, '2011-26-03', 1) INSERT INTO @sales VALUES(43
DECLARE @sales table(
itemnumber int,
saledate date,
ordid int)
INSERT INTO @sales VALUES(43029, '2011-26-03', 1)
INSERT INTO @sales VALUES(43029, '2011-26-03', 2)
INSERT INTO @sales VALUES(43029, '2011-26-03', 3)
INSERT INTO @sales VALUES(43029, '2011-26-03', 4)
INSERT INTO @sales VALUES(43029, '2011-26-03', 4)
INSERT INTO @sales VALUES(43029, '2011-26-04', 4)
INSERT INTO @sales VALUES(43029, '2011-26-04', 5)
INSERT INTO @sales VALUES(43029, '2011-26-04', 5)
INSERT INTO @sales VALUES(43030, '2011-26-04', 5)
INSERT INTO @sales VALUES(43030, '2011-26-04', 6)
INSERT INTO @sales VALUES(43030, '2011-26-04', 7)
INSERT INTO @sales VALUES(43030, '2011-26-04', 8)
INSERT INTO @sales VALUES(43030, '2011-26-04', 8)
INSERT INTO @sales VALUES(43030, '2011-26-04', 8)
INSERT INTO @sales VALUES(43030, '2011-26-05', 9)
INSERT INTO @sales VALUES(43030, '2011-26-05', 9)
INSERT INTO @sales VALUES(43030, '2011-26-05', 9)
INSERT INTO @sales VALUES(43030, '2011-26-05', 9)
INSERT INTO @sales VALUES(43030, '2011-26-05', 9)
INSERT INTO @sales VALUES(43030, '2011-26-05', 9)
INSERT INTO @sales VALUES(43030, '2011-26-05', 19)
INSERT INTO @sales VALUES(43030, '2011-26-05', 19)
INSERT INTO @sales VALUES(43030, '2011-26-05', 25)
INSERT INTO @sales VALUES(43030, '2011-26-05', 25)
INSERT INTO @sales VALUES(43030, '2011-26-05', 25)
INSERT INTO @sales VALUES(43030, '2011-26-05', 27)
INSERT INTO @sales VALUES(43030, '2011-26-05', 27)
INSERT INTO @sales VALUES(43030, '2011-26-05', 27)
INSERT INTO @sales VALUES(43050, '2011-26-05', 28)
INSERT INTO @sales VALUES(43050, '2011-26-05', 29)
INSERT INTO @sales VALUES(43050, '2011-26-05', 39)
INSERT INTO @sales VALUES(43050, '2011-26-05', 30)
INSERT INTO @sales VALUES(43050, '2011-26-06', 31)
INSERT INTO @sales VALUES(43050, '2011-26-06', 31)
INSERT INTO @sales VALUES(43090, '2011-26-07', 61)
INSERT INTO @sales VALUES(43090, '2011-26-07', 61)
INSERT INTO @sales VALUES(43090, '2011-26-07', 61)
INSERT INTO @sales VALUES(43090, '2011-26-07', 61)
INSERT INTO @sales VALUES(43090, '2011-26-08', 71)
INSERT INTO @sales VALUES(43090, '2011-26-08', 71)
输出如下表所示,仅计算该商品前几个月的销售额
ItemNo | MonthYear | Count
-------------------------
43029 | 03-2011 | 5
43030 | 04-2011 | 6
43050 | 05-2011 | 4
43090 | 07-2011 | 4
我能够通过显示第一个ord日期获得项目编号的总数量,并计算当天售出的项目数量,但无法合计当月/年度的所有项目,因为该项目可能在同一个月的多个订单/日期售出
任何帮助都会很好 试试这个
DECLARE @sales table(
itemnumber int,
saledate date,
saleid int)
INSERT INTO @sales VALUES(1234, '2015-01-10', 1)
INSERT INTO @sales VALUES(1234, '2015-01-11', 2)
INSERT INTO @sales VALUES(1234, '2015-01-12', 3)
INSERT INTO @sales VALUES(1234, '2015-01-13', 4)
INSERT INTO @sales VALUES(1234, '2015-01-14', 5)
INSERT INTO @sales VALUES(1234, '2015-02-10', 6)
INSERT INTO @sales VALUES(1234, '2015-02-11', 7)
INSERT INTO @sales VALUES(1234, '2015-03-10', 8)
INSERT INTO @sales VALUES(1234, '2015-04-10', 9)
INSERT INTO @sales VALUES(1234, '2015-04-16', 10)
INSERT INTO @sales VALUES(1256, '2015-02-10', 11)
INSERT INTO @sales VALUES(1256, '2015-02-11', 12)
INSERT INTO @sales VALUES(1256, '2015-02-12', 13)
INSERT INTO @sales VALUES(1256, '2015-02-13', 14)
INSERT INTO @sales VALUES(1256, '2015-02-14', 15)
INSERT INTO @sales VALUES(1256, '2015-03-10', 16)
INSERT INTO @sales VALUES(1256, '2015-03-11', 17)
INSERT INTO @sales VALUES(1256, '2015-04-10', 18)
INSERT INTO @sales VALUES(1256, '2015-04-10', 19)
INSERT INTO @sales VALUES(1256, '2015-04-16', 20)
INSERT INTO @sales VALUES(1259, '2015-02-10', 21)
INSERT INTO @sales VALUES(1259, '2015-02-11', 22)
INSERT INTO @sales VALUES(1259, '2015-03-12', 23)
INSERT INTO @sales VALUES(1259, '2015-03-13', 24)
INSERT INTO @sales VALUES(1259, '2015-03-14', 25)
INSERT INTO @sales VALUES(1259, '2015-03-10', 26)
INSERT INTO @sales VALUES(1259, '2015-03-11', 27)
INSERT INTO @sales VALUES(1259, '2015-04-10', 28)
INSERT INTO @sales VALUES(1259, '2015-04-10', 29)
INSERT INTO @sales VALUES(1259, '2015-04-16', 30)
INSERT INTO @sales VALUES(1255, '2015-03-10', 31)
INSERT INTO @sales VALUES(1255, '2015-03-11', 32)
INSERT INTO @sales VALUES(1255, '2015-03-12', 33)
INSERT INTO @sales VALUES(1255, '2015-03-13', 34)
INSERT INTO @sales VALUES(1255, '2015-03-14', 35)
INSERT INTO @sales VALUES(1255, '2015-03-10', 36)
INSERT INTO @sales VALUES(1255, '2015-03-11', 37)
INSERT INTO @sales VALUES(1255, '2015-03-10', 38)
INSERT INTO @sales VALUES(1255, '2015-04-10', 39)
INSERT INTO @sales VALUES(1255, '2015-04-16', 40)
SELECT s.itemnumber,
right(convert(varchar, fd.firstsaledate, 103), 7) AS firstsale,
COUNT(*) as firstmonthsales FROM @sales s
INNER JOIN
(SELECT itemnumber, Min(saledate) as firstsaledate FROM @sales
GROUP BY itemnumber) as fd
ON MONTH(s.saledate) = MONTH(fd.firstsaledate)
AND YEAR(s.saledate) = YEAR(fd.firstsaledate)
AND s.itemnumber = fd.itemnumber
GROUP BY s.itemnumber, fd.firstsaledate
结果
itemnumber firstsale firstmonthsales
1234 01/2015 5
1255 03/2015 8
1256 02/2015 5
1259 02/2015 2
使用乔纳森·威尔科克的样本数据 由于您是在2012年,您可以使用如下窗口功能
;With cte
as
(select
itemnumber,saledate,dense_rank() over (partition by itemnumber order by cast(month(saledate) as varchar(2))+'/'+cast(year(saledate) as varchar(4)) ) as rownum
from
@sales
)
select itemnumber,cast(month(saledate) as varchar(2))+'/'+cast(year(saledate) as varchar(4)),sum(rownum) as salescount
from cte
where rownum=1
group by
itemnumber,cast(month(saledate) as varchar(2))+'/'+cast(year(saledate) as varchar(4))
请检查链接并尝试改进问题:谢谢!刚刚修改-实际使用2016来欣赏它,但我假设同样适用-修复了标签there@Danimov82:是的,这是真的这很有帮助,谢谢-看起来我还需要按频道排序,所以如果你可以看的话作为新问题发布-看起来我还需要按频道排序-作为新问题发布,如果你可以看的话!