2017-04-05 63 views
1

在我的情况下SQL SELECT最后一个项目,我想选择每对夫妇(COMPANY_ID,PRODUCT_ID)的最后一个记录,并只返回了哪只股票是不为0基于以下几个条件

company_id product_id stock  date 
    165   6   0  2017-01-09 
    168   4   900000 2017-01-08 
    165   6   1520  2017-01-07 
    165   5  1200000 2017-01-06 
    167   2   0  2017-01-05 
    167   1  1401700 2017-01-04 
    167   1  1450800 2017-01-03 
    168   4   0  2017-01-02 
    167   2  2360400 2017-01-01 

在这个例子,表格应该是:

company_id product_id stock  date 
    168   4   900000 2017-01-08 
    165   5  1200000 2017-01-06 
    167   1  1401700 2017-01-04 

谢谢!

回答

2
  • 使用子查询,以获得最大日期每公司/产品。
  • 然后回到源表并过滤出零库存行。

查询

select t1.company_id, t1.product_id, t1.stock, t1.date 
from tablename t1 
     inner join (
      select company_id, product_id, max(date) maxdate 
      from tablename 
      group by company_id, product_id) t2 
     on t1.company_id = t2.company_id 
     and t1.product_id = t2.product_id 
     and t1.date = t2.maxdate 
where t1.stock <> 0 
+0

如果company_id/product_id的最大日期为零,则该company_id/product_id将不会返回任何行。 OP想要什么? – jarlh

+0

@jarlh这是由OP决定的。但它匹配样本输入/输出。当然,如果行没有被“公司,产品,日期”锁定,还会有其他问题。 –

+0

@jarlh如果日期中的最后一行是零库存,我不想返回夫妇company_id/product_id。对不起,如果我的问题不是我想要的那么清楚..谢谢你帮助我! – Spikist

3

有一个返回各自的company_id/PRODUCT_ID其最后日期子查询JOIN与结果(其中股票不为零):

select t1.company_id, t1.product_id, t1.stock, t1.date 
from tablename t1 
join (select company_id, product_id, max(date) maxdate 
     from tablename 
     where stock <> 0 group by company_id, product_id) t2 
    on t1.company_id = t2.company_id 
    and t1.product_id = t2.product_id 
    and t1.date = t2.maxdate 
where stock <> 0 
+0

看起来像OP需要'其中库存<> 0'在外'select'(参见'COMPANY_ID PRODUCT_ID = 165 PRODUCT_ID = 6'行) – Serg

+0

@serg,我想这也可以是有用的。没有这样的样本数据,所以我不在乎......我会加入! – jarlh

+0

@Serg该行与'和t1.date = t2.maxdate'不匹配 –