我有一些表想要获取某些数据信息:
--------------------------------------------------------------
|product_code | qty | stock_before | stock_after | date |
--------------------------------------------------------------
| xpto1 | 0 | 1 | 1 | 2015-01-01 |
| xpto1 | 1 | 1 | 2 | 2015-02-01 |
| xpto1 | 2 | -1 | 1 | 2015-03-01 |
| xpto2 | 0 | 1 | 1 | 2015-01-01 |
| xpto2 | 1 | 1 | 2 | 2015-02-01 |
| xpto2 | 2 | -1 | 1 | 2015-03-01 |
我想知道stock_before,2015-01-01之后的每个产品
所以我想要的结果是
| xpto1 | 1 | 1 | 2 | 2015-02-01 |
| xpto2 | 1 | 1 | 2 | 2015-02-01 |
我得到了这个:
| xpto1 | 1 | 1 | 2 | 2015-02-01 |
| xpto1 | 2 | -1 | 1 | 2015-03-01 |
| xpto2 | 1 | 1 | 2 | 2015-02-01 |
| xpto2 | 2 | -1 | 1 | 2015-03-01 |
让我们说我只想要为每种产品找到第一条记录。
答案 0 :(得分:0)
Select Product_code, qty, stock_before, stock_after, date
From table a
Where a.date > '01.01.2015' and
a.date = (Select min(b.date) from
table b where b.product_code =
a.product_code and b.date = a.date)
如果product_code,date是唯一组合,这将起作用因为subselect必须只返回一条记录。
答案 1 :(得分:0)
您的表格结构效率低下,应重新设计。
通常库存余额存储在两个表格中,如ballance(id,date)和ballance_product(id,ballance_id,product_id,quantity)。
首先从ballance时间轴中检索某个日期的ID,然后从ballance_product中检索某些ballance_id中的所有可用产品和数量。
ballance / ballance_product是在最后一个平衡*值和期间创建的文件的结束时间计算的。
将在某个日期返回产品库存的查询将是:
with
last_move as
(
select m.product_code, max(m.adate) as adate
from product_stock m
where m.adate <= :to_date
group by 1
)
select s.id, s.product_code, s.qty, s.stock_before, s.stock_after, s.adate
from last_move m
join product_stock s on (s.product_code = m.product_code and s.adate = m.adate)
您的假设&#34;在某个日期之后&#34;不符合逻辑。在某个日期之后是一个无限期的长期。在某个日期检索股票。