SELECT Date,vendorCustomer,InvoiceNo,ClosingStock
FROM
(
SELECT *,StockBalancekg + Tankkg AS ClosingStock,
ROW_NUMBER() OVER (PARTITION BY DATEDIFF(mm,0,Date) ORDER BY Date DESC,InvoiceNo DESC) AS Seq
FROM ChandraLog.dbo.Log
)t
WHERE Seq = 1
在上面的查询中,获取月末的期末存货状况良好。我需要从关闭库存开始的每个月初的库存。 我查询到如何将查询实现为上述查询。
select OpeningStock = LAG(ClosingStock) OVER (ORDER BY Date ) ,ClosingStock
from ChandraLog.dbo.Log
有人可以指导我吗? 源表sql:
Create Table Log(TDate Date, Customer varchar(55),InvoiceNo float,
StockBalance float,Tankkg float, StockBalancekg float);
INSERT INTO Log(TDate, Customer,InvoiceNo,StockBalance,Tankkg,StockBalancekg) VALUES
('2017/11/29','Lee Oil Mil Sdn bhd',413,5000,45267,15011)
,('2017/11/30','Production',416,4300,9567,24701)
,('2017/11/30','Jaya Utara Multitrade',421,4000,6511,9567)
,('2017/12/27','Melata Sdn Bhd',422,3500,23237,26061)
,('2017/12/30','Inayu Global Sdn Bhd',438,2000,22897,221)
,('2017/12/31','Usaha Edar Sdn Bhd',440,1000,13547,221)
,('2018-05-01','Production',NULL,500,3621,10147)
,('2018-02-22','Golden Planet Resources',458,400,4196,5032)
,('2018-02-22','Pasar Raya Mariana',459,300,4196,1632)
答案 0 :(得分:0)
这是您要实现的目标吗?
DECLARE @Log TABLE ( TDate Date, Customer varchar(55), InvoiceNo float, StockBalance float, Tankkg float, StockBalancekg float );
INSERT INTO @Log (
TDate, Customer,InvoiceNo,StockBalance,Tankkg,StockBalancekg
)
VALUES
('2017/11/29','Lee Oil Mil Sdn bhd',413,5000,45267,15011)
,('2017/11/30','Production',416,4300,9567,24701)
,('2017/11/30','Jaya Utara Multitrade',421,4000,6511,9567)
,('2017/12/27','Melata Sdn Bhd',422,3500,23237,26061)
,('2017/12/30','Inayu Global Sdn Bhd',438,2000,22897,221)
,('2017/12/31','Usaha Edar Sdn Bhd',440,1000,13547,221)
,('2018-05-01','Production',NULL,500,3621,10147)
,('2018-02-22','Golden Planet Resources',458,400,4196,5032)
,('2018-02-22','Pasar Raya Mariana',459,300,4196,1632);
-- fetch opening / closing stock --
SELECT
t.TDate, t.Customer, t.InvoiceNo, o.OpeningStock, t.ClosingStock
FROM
(
SELECT
*
, ( StockBalancekg + Tankkg ) AS ClosingStock
, DATEDIFF( mm, 0, TDate ) AS DatePartition
, ROW_NUMBER() OVER ( PARTITION BY DATEDIFF( mm, 0, TDate ) ORDER BY TDate DESC, InvoiceNo DESC ) AS Seq
FROM @Log
) t
CROSS APPLY (
SELECT TOP 1 StockBalancekg AS OpeningStock FROM @Log WHERE DATEDIFF( mm, 0, TDate ) = t.DatePartition ORDER BY InvoiceNo
) o
WHERE Seq = 1
返回
+------------+-----------------------+-----------+--------------+--------------+
| TDate | Customer | InvoiceNo | OpeningStock | ClosingStock |
+------------+-----------------------+-----------+--------------+--------------+
| 2017-11-30 | Jaya Utara Multitrade | 421 | 15011 | 16078 |
| 2017-12-31 | Usaha Edar Sdn Bhd | 440 | 26061 | 13768 |
| 2018-02-22 | Pasar Raya Mariana | 459 | 5032 | 5828 |
| 2018-05-01 | Production | NULL | 10147 | 13768 |
+------------+-----------------------+-----------+--------------+--------------+