postgresql的一个简单的sql

postgresql的一个简单的sql,第1张

概述首先是有两个表,一个是用户信息表,一个是用户登录日志表,用户信息表中有一个字段upgrade_time,是一个同步数据时间,每天如果用户登录,会将当前时间与upgrade_time时间去做比较,如果时间差在一天以内,那么不做同步,超过一天的话调用接口同步会员数据,并将upgrade_time更新成同步数据的时间。然后是用户登录日志表,这个表很简单,用户登录一次,就会插入一条数据,并记录当前登录的时

首先是有两个表,一个是用户信息表,一个是用户登录日志表,用户信息表中有一个字段upgrade_time,是一个同步数据时间,每天如果用户登录,会将当前时间与upgrade_time时间去做比较,如果时间差在一天以内,那么不做同步,超过一天的话调用接口同步会员数据,并将upgrade_time更新成同步数据的时间。然后是用户登录日志表,这个表很简单,用户登录一次,就会插入一条数据,并记录当前登录的时间。

因此根据上述两个表产生了一个需求,查询出所有无法同步最新数据的用户。

那么我们来分析这个需求,很简单无法同步数据就意味着,用户表中的upgrade_time比用户登录日志表中的当前用户的最近登录时间,至少小了一天以上,因为我们是一天同步一次嘛!所以只要找出这批,最近登录时间大于upgrade_time超过1天以上的用户就可以满足需求了。

这是t_mem_member_eclub用户信息表

这是t_store_member_login_log用户登录日志表

那么这个sql怎么写?首先我们要拿到每个用户的最近的登录时间。

SELECT MAX (login_time) login_time,member_ID FROM t_store_member_login_log GROUP BY member_ID

OK,然后是将这个用户最近的登录时间表与用户信息表关联起来。

SELECT eclub.member_ID,eclub.upgrade_time,log.login_time FROM t_mem_member_eclub eclub left JOIN ( SELECT MAX (login_time) login_time,member_ID FROM t_store_member_login_log GROUP BY member_ID ) log ON eclub.member_ID = log.member_ID

关联起来之后,最后一步就是比较upgrade_time和login_time了

SELECT eclub.member_ID,member_ID FROM t_store_member_login_log GROUP BY member_ID ) log ON eclub.member_ID = log.member_ID WHERE eclub.upgrade_time::timestamp + '1 day' < log.login_time;

至此,我们需要的结果已经查询出来了。

总结

以上是内存溢出为你收集整理的postgresql的一个简单的sql全部内容,希望文章能够帮你解决postgresql的一个简单的sql所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1174106.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存