Mysql比较同一个表

时间:2016-10-26 06:23:54

标签: mysql sql database

我有一个表,它基本上将关键活动记录到某些记录。这些关键活动是创建,存档和取消存档,基本上可能看起来有点像这样的'创建'和'存档'和' Unarchive'和'存档'该对象是“活跃的”。

id | object_id |  Object  |   action    | log_date
-------------------------------------------------------
1  |     1     |  Obj     |  Create     | 2016-02-05
2  |     2     |  Obj     |  Create     | 2016-02-07
3  |     3     |  Obj     |  Create     | 2016-02-08
4  |     1     |  Obj     |  Archived   | 2016-02-27
5  |     2     |  Obj     |  Archived   | 2016-02-15
6  |     2     |  Obj     |  UnArchive  | 2016-02-25
7  |     3     |  Obj     |  Archived   | 2016-03-10

我需要做的是能够说在2016年3月1日,有2个物体活跃,它们平均活动了21.3天(物体3活跃了20天,物体2作为2016-03-01领先平均值21.3)重新激活3天。

编辑: 因此,将使用的数据集如下:

id | object_id |  Object  |    action  | log_date
---------------------------------------------------
3  |     3     |  Obj     | Create     | 2016-02-08
6  |     2     |  Obj     | UnArchived | 2016-02-25

记录ID 3,对象3,因为它是在3月1日之前创建的。并且还没有在那时归档,并且记录了id 6对象id 2,因为它在3月之前已经被归档了。我对每个对象的活动总时间不是很感兴趣,只是基于其最后一次创建的时间活动。或者' unarchive'事件

然后,我需要能够在任何给定的日期范围内每月1次执行此操作。

我的第一个攻击是尝试隔离符合要求的记录

select object_id from log l 
where object = 'Obj'
AND object_id in (SELECT object_id from log where object = 'Obj' and `action`='Create' and log_date <= '2016-10-01')
and object_id not in (select object_id from log where object = 'Obj' and `action`='Archive' group by object_id having max(log_date) < '2016-10-01')
group by object_id

我怎么能不确定从哪里可以离开这里。

任何帮助都将不胜感激。

0 个答案:

没有答案