使用Snowflake,我试图对没有当前订阅的客户进行子集,并消除具有当前/活动合同的客户的所有id。
每个ID通常有多个与特定ID/客户的合同/续订历史记录相关联的记录。
只有在没有超过当前日期的合同时才知道客户是否活跃,而可能有多个过去的合同已经失效,但如果其中一个合同结束日期超过当前日期,该帐户仍然活跃。
考虑下面的表:
<表类>
Date_Start
Date_End
名称
ID
tbody><<tr>2015-07-03 2019-07-03 皮个 001 2019-07-04 2025-07-04 皮个 001 2013-10-01 2017-12-31 狗 031 2018-01-01 2018-06-30 狗 031 2020-01-01 2021-03-14 斤 022 2021-03-15 2024-06-01 斤 022 1999-06-01 2021-06-01 马的 052 2021-06-02 2022-01-01 马的 052 2022-01-02 2022-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,>从整体配对。