2017-04-05 32 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'不匹配 –