2014-09-30 42 views
0

从这个问题,下面就SELECT all the newest record distinct keyword with a non null value in one column选择所有最新的非空记录可基于另一个表

我现在有一个问题,我有这样的数据

PRODUCT: 
    id| product | amount| ownershipid 
    1 | ipod | 200 | 2 
    2 | ipod | 250 | 3 
    3 | ipod | 150 | 4 
    4 | apple | 100 | 1 
    5 | apple | 98 | 2 
    6 | apple | 500 | 3 
    7 | itunes | NULL | 1 
    8 | itunes | 50 | 2 
    9 | itunes | NULL | 3 
    10 | itunes | NULL | 4 

OWNERSHIP: 
     ownershipid| start  | end 
     1  | 2011-01-01 | 2011-12-31 
     2  | 2012-01-01 | 2012-12-31 
     3  | 2014-01-01 | 2014-12-31 
     4  | 2013-01-01 | 2013-12-31 

我需要最新的日期范围每种产品的可用数量。我无法通过所有权来执行订单,因为最新数据来自2014年。而不是2013年。OwnershipId是自动增量,我们接受历史数据。

所以,我的结果应该返回行2,6和8

+1

是由“start”还是“end”定义的“最近期”? – 2014-09-30 16:44:55

回答

0

假设最近被end定义,你可以做一个有点令人费解的加入,以获得结果;

SELECT p.product, p.amount 
FROM product p JOIN ownership o ON p.ownershipid = o.ownershipid 
JOIN (
    SELECT p.product, MAX(o.end) end 
    FROM product p JOIN ownership o ON p.ownershipid = o.ownershipid 
    WHERE p.amount IS NOT NULL GROUP BY p.product) z 
ON p.product = z.product AND o.end = z.end; 

An SQLfiddle to test with

内部查询获取每个项目具有非空数量的最大日期。

外部查询获取该时间/产品的金额。

+0

谢谢。这很好用! – 2014-09-30 17:23:08