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

标签 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
...

我想要的是检测特定属性(property)是否已售出(即 order by as_of asc已售出时的最后状态)。因此,就我而言,特性 1 和 3 已售出,而 2 则未售出。我知道如何使用 MS SQL Server 中的 OVER() 和 PARTITION BY() 来完成此操作,但现在我正在使用 MySQL,并且完全陷入困境(我不了解 MySQL 和 MSSQL)。

最佳答案

您可以通过执行以下操作来获取每个属性的最新状态:

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) 上建立索引。

关于mysql - 如何检测MySQL表窗口中是否包含特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38766286/

相关文章:

mysql - Codeigniter DB 获取与其存储类型匹配的查询结果

mysql - SQL 中分区的字符串连接?

sql - 前几行数组的累积数组?

sql - 删除所有行,但每组中值最大的行除外

c# - 使用 COUNT 进行查询

php - 使用 php mysql 和 inner join 重复结果

PHP MYSQL 如果字段等于检查回显

c# - Entity Framework - 数据库方案和测试数据的源代码控制?

PostgreSQL结合LAG和LEAD查询前后n行

sql - 列出每年最多产的三位作者