我有一个表用于记录应用程序的活动日志。现在我必须从实体X获取已在某些日期范围内发布的所有记录。因此,如果记录已发布且稍后未发布,则不必显示在结果中。
我不知道如何解释它,它找到每个的最后一次出现然后捕获“1”或“0”的值,取决于我在每种情况下都需要。
一个简化的例子(真实表有更多字段和更多数据):
id user_id date model main_relation_id field new_value
1 24 2017-03-21 A 1 publish 1
2 24 2017-03-21 A 2 publish 1
3 24 2017-03-22 A 3 publish 0
4 24 2017-03-22 A 2 update some text
5 24 2017-03-23 A 1 publish 0
6 24 2017-03-23 A 1 update some text
7 24 2017-03-24 A 3 publish 1
8 24 2017-03-24 A 2 publish 0
9 24 2017-03-24 A 2 update some text
10 24 2017-03-25 A 1 publish 1
11 24 2017-03-25 A 2 publish 1
11 24 2017-03-26 A 3 publish 0
我需要获取main_relation_id,按模型和日期进行过滤,所以如果我想获得模型A中已于2017-03-21和2017-03-24之间发布的所有寄存器,我将得到:
model_main_relation_id
1
3
如果我想获得在相同日期未发布的所有寄存器,结果必须是:
model_main_relation_id
2
我怎样才能得到这个结果?
答案 0 :(得分:0)
因此,您希望按main_relation_id
过滤最新状态,特定main_relation_id
是否已发布(field='publish'; new_value=1
)或未发布(field='publish'; new_value=0
)周期。
由于样本数据的date
字段中的日期对于多个记录是相等的,因此我必须假设id
字段中的较高值意味着以后的事件。因此max(id)
每main_relation_id
会产生最新的记录。
我要做的是在max(id)
为main_relation_id
的派生表中的特定模型的日期范围内获取field
'publish'
并加入此项在您的表格中找出特定的main_relation_id
是否已发布:
select table.main_relation_id
from table
inner join
(select main_relation_id, max(id) as maxid
from table
where date>=... and date<=... and `field`='publish' and model='...'
group by main_relation_id) t on table.id=t.maxid
where table.new_value=1
您需要替换过滤条件代替...
。如果您想获取未发布的数据,请将table.new_value=1
条件替换为table.new_value=0
。