基于以下几个条件
问题描述:
在我的情况下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
谢谢!
答
- 使用子查询,以获得最大日期每公司/产品。
- 然后回到源表并过滤出零库存行。
查询
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
答
有一个返回各自的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
如果company_id/product_id的最大日期为零,则该company_id/product_id将不会返回任何行。 OP想要什么? – jarlh
@jarlh这是由OP决定的。但它匹配样本输入/输出。当然,如果行没有被“公司,产品,日期”锁定,还会有其他问题。 –
@jarlh如果日期中的最后一行是零库存,我不想返回夫妇company_id/product_id。对不起,如果我的问题不是我想要的那么清楚..谢谢你帮助我! – Spikist