我有一个表,用于记录应用程序的活动日志。现在,我必须从实体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我怎样才能得到这个结果?
发布于 2017-03-20 15:44:44
因此,您希望通过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)是'publish' )在日期范围内获得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。
https://stackoverflow.com/questions/42907647
复制相似问题