SQL-以不同的方式过滤每个查询结果



我有一个问题一直让我抓狂。答案似乎是可能的(甚至是显而易见的),但我一直被难住了。

这是上下文。我正试图弄清楚哪些用户在其产品许可证到期后的最后90天内登录(现在他们不再是客户)。问题是,过滤器与许可证到期时间有关,每个客户的情况不同。我最初尝试写这样一个查询:

SELECT customer_id, email
FROM customers
WHERE last_login > ((SELECT license_end FROM customers)-7776000)

这是last_login和license_end的unix时间戳,因此7776000是90天的秒转换。我相信您已经确定,这个子查询将返回多行并失败。哎呀。

因此,在这种情况下,是否有方法返回在许可证结束的最后30天内具有last_login时间戳的所有ID和电子邮件,因为每个客户的每个许可证结束日期都不同?

我知道我可以在电子表格中完成,但这个谜题让我抓狂。提前感谢您的专业知识!!

您不需要子查询。您只是比较表中同一行的列。

SELECT customer_id, email
FROM customers
WHERE last_login > license_end - 7776000

如果它们真的在同一个客户表中(这似乎没有很好地规范化,但还好)

那么你只需要这个

SELECT customer_id, email
FROM customers
WHERE last_login > license_end-7776000

最新更新