SQL查询的日期子集



使用Snowflake,我试图对没有当前订阅的客户进行子集,并消除具有当前/活动合同的客户的所有id。

每个ID通常有多个与特定ID/客户的合同/续订历史记录相关联的记录。

只有在没有超过当前日期的合同时才知道客户是否活跃,而可能有多个过去的合同已经失效,但如果其中一个合同结束日期超过当前日期,该帐户仍然活跃。

考虑下面的表:

<表类> Date_Start Date_End 名称 ID tbody><<tr>2015-07-032019-07-03皮个0012019-07-042025-07-04皮个0012013-10-012017-12-31狗0312018-01-012018-06-30狗0312020-01-012021-03-14斤0222021-03-152024-06-01斤0221999-06-012021-06-01马的0522021-06-022022-01-01马的0522022-01-022022-07-04马的052

由于每个名称和ID有许多行,因此您应该聚合数据,然后使用HAVING子句仅选择您感兴趣的数据。

SELECT name, id
FROM table
GROUP BY name, id
HAVING MAX(date_end) < GETDATE();

如果您的DBMS支持EXCEPT操作符,您可以使用它来计算:

SELECT DISTINCT Name, ID FROM tab
EXCEPT
SELECT DISTINCT Name, ID FROM tab WHERE Date_end > <your_date>

这将删除活动的<Name,>从整体配对。

最新更新