如何在 SQL Server 中查询最新岛的大小?

Posted

技术标签:

【中文标题】如何在 SQL Server 中查询最新岛的大小?【英文标题】:How do I query for the size of the newest island in SQL Server? 【发布时间】:2019-05-30 18:53:43 【问题描述】:

我想查询 SQL Server (Azure) 中“间隙和孤岛”问题中最后一个孤岛的大小。

假设我有下表:

ID date status
500 2019-05-15 1 
528 2019-05-16 0 
538 2019-05-17 0 
550 2019-05-18 1 
580 2019-05-19 0 
590 2019-05-20 0 

ID 是一个标识列 date 是一个日期列 状态为 0 或 1。

我想知道状态设置为 0 的天数。在这种情况下,今天是 2019-05-20。

如何编写查询以获取最后一个状态列的计数为 0(即 2)?

【问题讨论】:

您能详细说明您所说的天数吗?是否应该忽略以 1(按时间顺序)结尾的状态组? 【参考方案1】:

您可以使用status = 1 找到最近的记录,并使用它来计算最近使用status = 0 的行数。

select
    count(*) as cnt
from yourTable
where [date] > (select max([date]) from yourTable where [status] = 1)

【讨论】:

【参考方案2】:

假设您要计算行数(而不是使用日期算术),那么一个安全的方法是:

select count(*) as cnt
from t
where [date] > all (select [date] from t where status = 1);

即使没有1s,这也应该可以工作。

【讨论】:

以上是关于如何在 SQL Server 中查询最新岛的大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中使用子查询而不是视图

SQL Server 如何查询最后一条记录

显示最新不同数据的 SQL Server 查询

如何在 SQL Server 企业版中获取数据库大小

sqlserver中如何写查询语句

如何查看sql server版本?