如何检测MySQL表窗口中是否包含特定值

时间:2016-08-04 11:37:24

标签: mysql window-functions

我的数据结构如下:

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)。

1 个答案:

答案 0 :(得分: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)上的索引。