1
如果我有一个表“表1”,列有:选择在当在另一场对应一个字段的最大的东西
EMAIL | USER_ID | START_DATE | CANCEL_DATE
如果一个人的迹象,进了我们的数据库,他们出现一次。如果他们取消他们的账户,他们将再次出现,并且CANCEL_DATE被填充 - 这样两次。如果他们重新订阅,他们会出现3次,新记录会有新的START_DATE。
所以表格是在订阅而不是帐户级别。
如果我想拉已经取消,因为重新订阅不是我需要(用简单的英语)的电子邮件地址和人的用户ID的列表,以这样的:
- 选择所有记录(电子邮件和ID)在CANCEL_DATE至少有1个值(如果他们从未取消它是NULL)
- 然后,这些记录中只包括那些在查看START_DATE的MAX时CANCEL_DATE不为NULL的记录。
我该怎么做?
如果是excel,我会查看取消日期列的最大开始日期。
希望我有道理?
- 稍后添加。我还需要补充的条件,最后的结果应该只包括其中CANCEL_DATE < CURRENT_DATE
我想我使用子查询了它的记录。这是一种更清洁的方式吗?
SELECT EMAIL, USER_ID FROM (
SELECT EMAIL, GUID, CANCEL_DATE
FROM table1
GROUP BY EMAIL, USER_ID, CANCEL_DATE
HAVING MAX(CONTRACT_EFFECTIVE_DATE) < MAX(SUBSCRIPTION_END_DATE)
) base1
WHERE SUBSCRIPTION_END_DATE < CURRENT_DATE
感谢@dnoeth查询运行,这比我以前更进一步。但是结果集比我知道的要小。这是什么信号?我期待〜50k的记录,但相反得到1.5k。我知道这些信息并不多,但不知道它是否意味着什么? –
这是重新订阅的用户。我认为OP希望“目前全部取消”用户。我想只是将比较反转为max(CANCEL_DATE)> max(START_DATE)。 – AndySavage
@AndySavage:你可能是对的,我需要改变这种状况。 – dnoeth