Sql 每隔14天提醒尚未登录的用户

Sql 每隔14天提醒尚未登录的用户,sql,postgresql,Sql,Postgresql,我必须向至少14天未登录的用户发送电子邮件,并每隔14天提醒他们一次。 因此,用户将收到提醒电子邮件14、28、42、56、70。。。上次登录后的天。 查询每天只执行一次,但我也可以更改间隔 目前,我使用类似这样的查询来获取过去14天内未登录的用户,但我需要将其扩展为每14天登录一次 SELECT mail FROM users WHERE lastLogin >= truncate_to_date(now() - 14 days) AND lastLogin < t

我必须向至少14天未登录的用户发送电子邮件,并每隔14天提醒他们一次。 因此,用户将收到提醒电子邮件14、28、42、56、70。。。上次登录后的天。 查询每天只执行一次,但我也可以更改间隔

目前,我使用类似这样的查询来获取过去14天内未登录的用户,但我需要将其扩展为每14天登录一次

SELECT mail FROM users
WHERE   lastLogin >= truncate_to_date(now() - 14 days) 
    AND lastLogin <  truncate_to_date(now() - 14 days + 1 day);
有人能告诉我如何编写
getDaysSinceEpoch(timestamp)
->int函数吗? 如果我可以内联这个函数而不是单独的函数,那就太好了

我考虑过的备选方案:

  • 为此添加一个新字段:对于一个很少使用的情况来说,这是相当大的开销,而且值总是可以计算出来的

我希望有这样的查询:

SELECT mail
FROM users
WHERE lastLogin  < current_date AND
      extract(day from (current_date - date_trunc('day', lastLogin) ))::int % 14 = 0;
选择邮件
来自用户
其中lastLogin<当前日期和
摘录(从(当前日期-日期('day',lastLogin)))开始的日期::int%14=0;

使用模的想法很好,但查询应该简单得多:

select mail 
from users 
where lastlogin < current_date
and (current_date - lastlogin::date) % 14 = 0;
选择邮件
来自用户
其中lastlogin
不起作用:
错误:运算符不存在:间隔%integer
啊,那么lastlogin不是日期,而是时间戳。将其转换为日期(
lastlogin::date
),您就可以了。(
date-date=int
;而
date-timestamp=interval
)现在它按预期工作。谢谢。我没有想到它会这么简单/简短。这忽略了lastlogin当前日期的条件,但在其他情况下它工作正常。也许值得一提的是,此解决方案将与时间戳一起工作,但与时间戳一起工作不完全(DST更改有一些奇怪的情况,因为时间戳减法使用固定的24小时作为一天,例如
select extract(从时间戳“2016-03-27 00:00:00欧洲/伦敦”-时间戳“2016-03-28 00:00:00欧洲/伦敦”开始的一天)
将产生
0
select mail 
from users 
where lastlogin < current_date
and (current_date - lastlogin::date) % 14 = 0;