给定一组带有时间戳字段的记录(代表我的应用程序中的签名),那么确定连续签入的当前条纹的好方法是什么?
换句话说,通过签入时间降序排序的签到,在用户错过一天之前有多少条记录?
目前我正在使用这种技术:
SELECT distinct(uca.created_at::date) as created_at
FROM user_challenge_activities as uca INNER JOIN user_challenges as uc
ON user_challenge_id = uc.ID WHERE uc.user_id = #{user.id}
order by (uca.created_at::date) DESC;
Run Code Online (Sandbox Code Playgroud)
...我将签到时间戳转换为日期(最终以2012-03-20结束),然后在代码中,浏览记录并递增计数器,直到记录与下一记录之间的日期大于1天.
然而,这种方法对我来说似乎很笨拙,而且看起来像Postgres会擅长的那种东西.
那么实际上有更好的方法来实现这一目标吗?
我正在使用GreenPlum引擎,我正在使用pgAdmin来查询数据,我只有读取权限所以我无法创建函数或程序,甚至我不知道为什么我无法使用变量.
这是我的数据和期望的结果:
Pais Campaña Representante Actividad Racha **Desired value** 96 20150302 758593197 1 1 1 96 20150303 758593197 1 2 2 96 20150304 758593197 1 3 3 96 20150305 758593197 0 1 1 96 20150306 758593197 1 4 1 96 20150307 758593197 0 2 1 96 20150308 758593197 0 3 2 96 20150309 758593197 1 5 1 96 20150310 758593197 0 4 1 96 20150311 758593197 0 5 2 96 20150312 758593197 0 6 3 96 20150313 758593197 0 7 …