Sql 根据日期选择记录
下面是我的查询,我想从那些将首先过期的SKU中选择数量。请帮我怎么做Sql 根据日期选择记录,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,下面是我的查询,我想从那些将首先过期的SKU中选择数量。请帮我怎么做 DECLARE @Data table (Id int identity(1,1) , SKU varchar(10) , QtyRec int , Expiry date , Rec date) DECLARE @Qty int = 20 INSERT @Data VALUES ('001A', 5 ,'2017-01-15','2015-11-14'), ('001A', 8 ,'2017-01-10','2015-11
DECLARE @Data table (Id int identity(1,1)
, SKU varchar(10)
, QtyRec int
, Expiry date
, Rec date)
DECLARE @Qty int = 20
INSERT @Data VALUES
('001A', 5 ,'2017-01-15','2015-11-14'),
('001A', 8 ,'2017-01-10','2015-11-14'),
('001A', 6 ,'2015-12-15','2015-11-15'),
('001A', 25,'2016-01-01','2015-11-16'),
('001A', 9 ,'2015-12-20','2015-11-17')
;WITH sumqty AS
(
SELECT *, SUM(QtyRec) OVER (PARTITION BY SKU ORDER BY Id) AS TotalQty FROM @Data
)
,takeqty AS (
SELECT *,
CASE
WHEN @Qty >= TotalQty THEN QtyRec
ELSE @Qty - ISNULL(LAG(TotalQty) OVER (PARTITION BY SKU ORDER BY Id), 0)
END AS TakeQty
FROM sumqty
)
SELECT * FROM takeqty WHERE TakeQty > 0
有许多可能的结果取决于您的问题: 如果要根据到期日升序排序结果集,请在CTEs查询结束时使用“按到期日排序”。或选择顶部过期:使用“按过期日期选择TOP1行数超额订购”作为“序号”,而不是“按过期日期选择行数超额订购”作为“序号”
像这样的:?请阅读。您需要在问题中包含代码,而不仅仅是在外部站点上。请回答您的问题。您确实需要描述您的实际问题。上次是从temp中获取数据。不使用order by and now排序的表。。。嗯,这是不可能知道的。我的问题是我想实现数据检索规则,如。。FEFOFirst EXITION first out、LEFO Last EXITION first out、FIFO FIFO first In first out查询中。。。我想从将首先过期的sku中选择数量。这就是我想要实现的。
DECLARE @Data table (Id int identity(1,1)
, SKU varchar(10)
, QtyRec int
, Expiry date
, Rec date)
DECLARE @Qty int = 20
INSERT @Data VALUES
('001A', 5 ,'2017-01-15','2015-11-14'),
('001A', 8 ,'2017-01-10','2015-11-14'),
('001A', 6 ,'2015-12-15','2015-11-15'),
('001A', 25,'2016-01-01','2015-11-16'),
('001A', 9 ,'2015-12-20','2015-11-17');
WITH sumqty AS
(
SELECT *, SUM(QtyRec) OVER (PARTITION BY SKU ORDER BY Id) AS TotalQty FROM @Data
)
,takeqty AS (
SELECT *,
CASE
WHEN @Qty >= TotalQty THEN QtyRec
ELSE @Qty - ISNULL(LAG(TotalQty) OVER (PARTITION BY SKU ORDER BY Id), 0)
END AS TakeQty
FROM sumqty
)
SELECT ROW_NUMBER() OVER(ORDER BY Expiry) AS 'SN'
, SKU
, QtyRec
, Expiry
, Rec
, TotalQty
, TakeQty
FROM takeqty WHERE TakeQty > 0
ORDER BY Expiry;