根据日期选择记录

阿丽娜·迪尔沙德(Alina Dilshad)

以下是我的查询,我希望从那些将首先过期的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
火星

有许多可能的结果取决于您的问题:

如果要基于到期日的升序对结果集进行排序,请ORDER BY Expiry在CTE查询末尾使用或选择最高过期时间:使用SELECT TOP(1) ROW_NUMBER() OVER(ORDER BY Expiry) AS 'SN'代替SELECT ROW_NUMBER() OVER(ORDER BY Expiry) AS 'SN'

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;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据最后日期选择记录

来自分类Dev

查询以根据日期选择适当的反馈记录

来自分类Dev

根据为每个记录指定的日期选择记录

来自分类Dev

如何根据日期选择所有ms访问表记录

来自分类Dev

如何在mysql中根据最近的日期选择记录

来自分类Dev

根据时间选择记录

来自分类Dev

根据条件选择记录

来自分类Dev

根据日期选择禁用日期

来自分类Dev

根据SQL Server中的唯一日期选择记录,并计算该日期有多少记录

来自分类Dev

根据日期范围查找记录

来自分类Dev

根据一列选择不同的记录组,然后按日期时间排序

来自分类Dev

查询以根据您所在的年份在两个日期之间选择记录

来自分类Dev

MySQL查询根据给定的日期输入选择记录而没有时间范围

来自分类Dev

根据在 MySql 中具有最小和最大日期的记录选择差异

来自分类Dev

根据记录R之间的差异选择记录

来自分类Dev

活动记录日期范围选择

来自分类Dev

根据日期列选择数据

来自分类Dev

根据日期列选择数据

来自分类Dev

根据创建日期选择版本

来自分类Dev

根据今天的日期选择ID

来自分类Dev

根据日期时间选择计算新日期

来自分类Dev

Laravel 5:如何根据日期检索记录?

来自分类Dev

如何根据日期条件获取记录?

来自分类Dev

在JDBC中根据日期提取记录

来自分类Dev

根据日期用以前的记录更新列

来自分类Dev

如何根据最大日期获取不同的记录?

来自分类Dev

根据日期重复记录-Rails

来自分类Dev

根据最新日期获取记录

来自分类Dev

BIRT中根据日期统计sql记录