Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据日期选择记录_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql 根据日期选择记录

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

下面是我的查询,我想从那些将首先过期的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 * 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;