我有一张这样的表: -
TABLE A -------------------------------- Date | Serial | Qty -------------------------------- 20110101 ABC 1 20110102 ABC -1 20110105 ABC 1 20110106 ABC 1 20110108 ABC -1
我需要知道使用SQL& amp;的基于FIFO的余额是多少?最终输出将如下所示: -
Date Serial Qty
20110106 ABC 1
感谢。
答案 0 :(得分:0)
你只想从表中挑出一条记录?喜欢这个?
SELECT * FROM your_table WHERE Date = '20110106' AND Serial = 'ABC'
答案 1 :(得分:0)
我想你想要像
这样的东西SELECT serial, max(date), 1 qty, sum( qty*size ) size
FROM tableA
GROUP BY serial
如果您的最终输出结果为负,那么您使用的数据库引擎应该具有与Oracle的SIGN和ABS功能相同的功能
SELECT serial, max(date), sign( sum( qty*size ) ) qty, abs( sum( qty*size ) ) size
FROM tableA
GROUP BY serial
请注意,我猜你想要的是截至最后一天的总剩余数量,并且通过将特定SERIAL
表中所有行的正数量与正数相比较而获得此数量。我认为这很接近,但我不确定你是如何获得DATE值的
答案 2 :(得分:0)
类似的东西:
select Serial, sum(qty) as Total, Size from table_a group by Serial, Size
会给你:
TABLE A
Serial Total Size
ABC 0 23
ABC 0 22
ABC 1 24
当然,您可以添加一个where子句来进一步限制查询:
select Serial, sum(qty) as Total, Size from table_a where Serial='ABC' and Size=24 group by Serial, Size
只会为您提供尺寸为24的序列ABC的信息:
Serial Total Size
ABC 1 24
或者您可以使用having子句过滤掉Total为零的任何内容:
select Serial, sum(qty) as Total, Size from table_a group by Serial, Size having sum(qty) <> 0
Serial Total Size
ABC 1 24
答案 3 :(得分:0)
SELECT MAX(date) AS date, serial, ABS(SUM(qty * size)) AS size, SIGN(SUM(qty * size)) AS qty
FROM your_table
GROUP BY serial