-- 获取最新的数据
select to_timestamp(max(timestamp))
from activities;

-- 获取最旧的数据
select to_timestamp(min(timestamp))
from activities;

-- 1天内的数据，按action分组排序
select b.action_id, b.action, count(b.action_id)
from activities as a
         left join actions as b on a.action_id = b.action_id
where timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by b.action_id, b.action
order by count(b.action_id) desc;

-- 1天内的block-place行为按玩家分组
select cause_player_id, players.player, count(*)
from activities
         left join players on activities.cause_player_id = players.player_id
where action_id = (select action_id from actions where action = 'block-place')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by cause_player_id, player
order by count(cause_player_id) desc;

-- 1天内，非明确实体触发的block-place行为
select *
from activities
where action_id = (select action_id from actions where action = 'block-place')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
  and cause_id is not null
limit 500;

-- 1天内，非玩家触发的block-place行为，按entity_type
select cause_entity_type_id, entity_type, count(*)
from activities
         left join entity_types on activities.cause_entity_type_id = entity_types.entity_type_id
where action_id = (select action_id from actions where action = 'block-place')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
  and cause_player_id is null
group by cause_entity_type_id, entity_type
order by count(cause_entity_type_id) desc;

-- 1天内，非明确实体触发的block-place行为，按cause_id分组
select activities.cause_id, causes.cause, count(*)
from activities
         left join causes on activities.cause_id = causes.cause_id
where action_id = (select action_id from actions where action = 'block-place')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
  and activities.cause_id is not null
group by activities.cause_id, causes.cause
order by count(activities.cause_id) desc;

-- 1天内，nature引发的block-place事件，按坐标分组并排序
select world_id, x, y, z, count((world_id, x, y, z))
from activities
where action_id = (select action_id from actions where action = 'block-place')
  and cause_id = (select cause_id from causes where cause = 'nature')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by world_id, x, y, z
order by count((world_id, x, y, z)) desc;

-- 1天内，unknown 引发的 block-place 事件，按坐标分组并排序
select world_id, x, y, z, count((world_id, x, y, z))
from activities
where action_id = (select action_id from actions where action = 'block-place')
  and cause_id = (select cause_id from causes where cause = 'unknown')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by world_id, x, y, z
order by count((world_id, x, y, z)) desc;

-- 1天内的 block-break 行为按玩家分组
select cause_player_id, players.player, count(*)
from activities
         left join players on activities.cause_player_id = players.player_id
where action_id = (select action_id from actions where action = 'block-break')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by cause_player_id, player
order by count(cause_player_id) desc;

-- 1天内，非玩家触发的 block-break 行为，按 cause_id 分组
select activities.cause_id, causes.cause, count(*)
from activities
         left join causes on activities.cause_id = causes.cause_id
where action_id = (select action_id from actions where action = 'block-break')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
  and activities.cause_player_id is null
group by activities.cause_id, causes.cause
order by count(activities.cause_id) desc;

-- 1天内，非玩家触发的 block-break 行为，按 type_id 分组
select activities.cause_entity_type_id, entity_types.entity_type, count(*)
from activities
         left join entity_types on activities.cause_entity_type_id = entity_types.entity_type_id
where action_id = (select action_id from actions where action = 'block-break')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
  and activities.cause_player_id is null
group by activities.cause_entity_type_id, entity_types.entity_type
order by count(activities.cause_id) desc;

-- 1天内，活塞破换方块，按坐标分组
select world_id, x, y, z, count((world_id, x, y, z))
from activities
where action_id = (select action_id from actions where action = 'block-break')
  and cause_id = (select causes.cause_id from causes where cause = 'piston')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by world_id, x, y, z
order by count((world_id, x, y, z)) desc;

-- 1天内，活塞破换方块，按方块类型分组
select blocks.name, count((affected_block_id, blocks.name))
from activities
         left join blocks on activities.affected_block_id = blocks.block_id
where action_id = (select action_id from actions where action = 'block-break')
  and cause_id = (select causes.cause_id from causes where cause = 'piston')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by affected_block_id, blocks.name
order by count((affected_block_id, blocks.name)) desc;

-- 1天内，爆炸破换方块，按坐标分组
select world_id, x, y, z, count((world_id, x, y, z))
from activities
where action_id = (select action_id from actions where action = 'block-break')
  and cause_id = (select causes.cause_id from causes where cause = 'explosion')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by world_id, x, y, z
order by count((world_id, x, y, z)) desc;

-- 1天内，爆炸破换方块，按方块类型分组
select blocks.name, count((affected_block_id, blocks.name))
from activities
         left join blocks on activities.affected_block_id = blocks.block_id
where action_id = (select action_id from actions where action = 'block-break')
  and cause_id = (select causes.cause_id from causes where cause = 'explosion')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by affected_block_id, blocks.name
order by count((affected_block_id, blocks.name)) desc;

-- 1天内，decay 破换方块，按坐标分组
select world_id, x, y, z, count((world_id, x, y, z))
from activities
where action_id = (select action_id from actions where action = 'block-break')
  and cause_id = (select causes.cause_id from causes where cause = 'decay')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by world_id, x, y, z
order by count((world_id, x, y, z)) desc;

-- 1天内，非明确实体触发的block-break行为，按坐标分组
select world_id, x, y, z, count((world_id, x, y, z))
from activities
where action_id = (select action_id from actions where action = 'block-break')
  and cause_id is not null
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by world_id, x, y, z
order by count((world_id, x, y, z)) desc;

-- 1天内，风弹实体触发的 block-break 行为，按坐标分组
select world_id, x, y, z, count((world_id, x, y, z))
from activities
where action_id = (select action_id from actions where action = 'block-break')
  and cause_entity_type_id = (select entity_type_id from entity_types where entity_type = 'breeze_wind_charge')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by world_id, x, y, z
order by count((world_id, x, y, z)) desc;

-- 查看最近风弹破换方块的数据
select *
from activities
where action_id = (select action_id from actions where action = 'block-break')
--   and cause_entity_type_id = (select entity_type_id from entity_types where entity_type = 'breeze_wind_charge')
  and cause_entity_type_id is null
  and cause_player_id is null
  and cause_id is null
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
limit 100;

-- 1天内，item-dispense行为，按发射的物品分组统计
select descriptor, count(*)
from activities
where action_id = (select action_id from actions where action = 'item-dispense')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by descriptor
order by count(descriptor) desc;

-- 1天内，发射的矿车，按坐标分组
select world_id, x, y, z, count((world_id, x, y, z))
from activities
where action_id = (select action_id from actions where action = 'item-dispense')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
  and descriptor = 'Minecart'
group by world_id, x, y, z
order by count((world_id, x, y, z)) desc;

-- 1天内的 entity-death 行为按玩家分组
select cause_player_id, players.player, count(*)
from activities
         left join players on activities.cause_player_id = players.player_id
where action_id = (select action_id from actions where action = 'entity-death')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by cause_player_id, player
order by count(cause_player_id) desc;

-- 1天内的 entity-death 按实体分组
select affected_entity_type_id, entity_types.entity_type, count(*)
from activities
         left join entity_types on activities.affected_entity_type_id = entity_types.entity_type_id
where action_id = (select action_id from actions where action = 'entity-death')
  and timestamp > EXTRACT(EPOCH FROM current_timestamp(0))::bigint - 86400 * 1
group by affected_entity_type_id, entity_types.entity_type
order by count(*) desc;
