2016-08-04 38 views
2

我的数据结构,如:如何检测特定的值是否包含在MySQL表窗口

id  property_id  status  tran_id  as_of 
1  1    sold  1111   2015-04-01  
2  1    listed  1111   2015-01-05 
3  1    pending  1111   2015-01-02 

7  2    listed  2211   2014-09-01 
8  2    delisted 2211   2014-06-01 
9  2    listed  2211   2014-04-01 
10  2    delisted 2211   2014-01-01 
11  2    sold  2211   2010-01-01 

12  3    sold  6661   2015-08-01  
13  3    pending  6661   2015-04-05 
14  3    listed  6661   2015-04-01 
... 

我想是能够检测特定属性是否被出售(即最后状态时order by as_of asc不是sold)。因此,对于我的情况,属性1和3已售出,而2不是。我知道如何使用MS SQL Server的OVER()PARTITION BY(),但现在我正在使用MySQL,并且我完全停留在它上(我不知道MySQL和MSSQL)。

回答

2

您可以通过执行获得每个属性的最后状态:

select t.*, 
     (case when status = 'sold' then 1 else 0 end) as is_sold 
from t 
where t.as_of = (select max(t2.as_of) 
       from t t2 
       where t2.property_id = t.property_id 
       ); 

如果你有大量的数据,则建议在t(property_id, date)的索引。

+0

谢谢,只需稍作调整,这个查询就是我正在寻找的! –

+0

而调整是? –

+0

我认为OPs列是'as_of',因为这个查询使用了'date' @juergend – e4c5

相关问题