mirror of
https://github.com/norohind/SquadsActivityMonitor.git
synced 2026-10-25 01:06:03 +03:00
Migrating to new DB schema (WIP)
This commit is contained in:
3 files changed
+315
-116
No files matched your search
+149
-100
@@ -1,129 +1,178 @@
|
||||
schema_create = """create table if not exists squads_stats_states (
|
||||
action_id integer,
|
||||
schema_create = """create table if not exists squads_stats_states_action_info (
|
||||
action_id serial primary key,
|
||||
leaderboard_type text,
|
||||
platform text,
|
||||
timestamp timestamp default timezone('utc', now())
|
||||
);
|
||||
|
||||
create table if not exists squads_stats_states_data (
|
||||
action_id integer,
|
||||
squadron_id integer,
|
||||
score bigint,
|
||||
percentile integer,
|
||||
rank integer,
|
||||
name text,
|
||||
tag text,
|
||||
timestamp timestamp default timezone('utc', now()));
|
||||
|
||||
create index if not exists idx_action_id_0 on squads_stats_states (action_id);
|
||||
create index if not exists idx_platform_leaderboard_type_1 on squads_stats_states(platform, leaderboard_type);
|
||||
create index if not exists idx_timestamp_0 on squads_stats_states(timestamp);
|
||||
foreign key (action_id) references squads_stats_states_action_info(action_id)
|
||||
);
|
||||
"""
|
||||
|
||||
select_last_action_id = """select action_id
|
||||
from squads_stats_states
|
||||
create_new_action_id = """
|
||||
insert into squads_stats_states_action_info (leaderboard_type, platform) values (%(LB_type)s, %(platform)s);
|
||||
|
||||
select action_id
|
||||
from squads_stats_states_action_info
|
||||
order by action_id desc
|
||||
limit 1;"""
|
||||
|
||||
insert_leader_board = """insert into squads_stats_states (action_id, leaderboard_type, platform, squadron_id, score,
|
||||
percentile, rank, name, tag)
|
||||
values
|
||||
(%(action_id)s, %(LB_type)s, %(platform)s, %(squadron)s, %(score)s, %(percentile)s, %(rank)s, %(name)s, %(tag)s);"""
|
||||
|
||||
select_activity_pretty_names = """select
|
||||
sum_score::bigint as "sum_score",
|
||||
to_char(timestamp, 'YYYY-MM-DD HH24:MI:SS') as "timestamp",
|
||||
action_id::bigint as "action_id",
|
||||
sum_score_old::bigint as "sum_score_old",
|
||||
(sum_score - sum_score_old)::bigint as "diff"
|
||||
from
|
||||
(
|
||||
select
|
||||
sum_score,
|
||||
min(timestamp) as timestamp,
|
||||
action_id,
|
||||
lag (sum_score, 1) over (order by action_id) sum_score_old
|
||||
from (
|
||||
select sum(score) as sum_score, min(timestamp) as timestamp, action_id
|
||||
from squads_stats_states
|
||||
where
|
||||
leaderboard_type = %(LB_type)s and
|
||||
platform = %(platform)s and
|
||||
%(high_timestamp)s::timestamp >= timestamp and
|
||||
timestamp >= %(low_timestamp)s::timestamp
|
||||
group by action_id
|
||||
) as foo
|
||||
group by sum_score, action_id
|
||||
order by timestamp desc
|
||||
|
||||
) as foo1
|
||||
where (sum_score - sum_score_old) <> 0
|
||||
insert_leaderboard = """
|
||||
insert into squads_stats_states_data (action_id, squadron_id, score, percentile, rank, name, tag)
|
||||
values
|
||||
(%(action_id)s, %(squadron)s, %(score)s, %(percentile)s, %(rank)s, %(name)s, %(tag)s);"""
|
||||
|
||||
|
||||
select_activity_pretty_names = """
|
||||
with action_ids as (
|
||||
select action_id, timestamp
|
||||
from squads_stats_states_action_info
|
||||
where
|
||||
leaderboard_type = %(LB_type)s and
|
||||
platform = %(platform)s and
|
||||
%(high_timestamp)s::timestamp >= timestamp
|
||||
and timestamp >= %(low_timestamp)s::timestamp
|
||||
order by action_id desc
|
||||
),
|
||||
|
||||
sum_history as (
|
||||
select sum(score) as sum_score, squads_stats_states_data.action_id as action_id, action_ids.timestamp as timestamp
|
||||
from squads_stats_states_data, action_ids
|
||||
where squads_stats_states_data.action_id = action_ids.action_id
|
||||
group by squads_stats_states_data.action_id, action_ids.timestamp
|
||||
),
|
||||
|
||||
sum_history_old_calculated as (select
|
||||
sum_score,
|
||||
min(timestamp) as timestamp,
|
||||
action_id,
|
||||
lag (sum_score, 1) over (order by action_id) sum_score_old
|
||||
from sum_history
|
||||
group by sum_score, action_id
|
||||
order by timestamp desc
|
||||
)
|
||||
|
||||
select
|
||||
sum_score::bigint as "sum_score",
|
||||
to_char(timestamp, 'YYYY-MM-DD HH24:MI:SS') as "timestamp",
|
||||
action_id::bigint as "action_id",
|
||||
sum_score_old::bigint as "sum_score_old",
|
||||
(sum_score - sum_score_old)::bigint as "diff"
|
||||
from sum_history_old_calculated
|
||||
where (sum_score - sum_score_old) <> 0
|
||||
limit %(limit)s;"""
|
||||
|
||||
select_diff_by_action_id = """select
|
||||
select_diff_by_action_id = """
|
||||
with origin_record as (
|
||||
select action_id, timestamp, leaderboard_type, platform
|
||||
from squads_stats_states_action_info
|
||||
where action_id = %(action_id)s
|
||||
),
|
||||
prev_records_lag as (
|
||||
select
|
||||
squads_stats_states_action_info.action_id,
|
||||
lag(squads_stats_states_action_info.action_id, 1) over (order by squads_stats_states_action_info.action_id) prev_action_id
|
||||
from squads_stats_states_action_info, origin_record
|
||||
where squads_stats_states_action_info.platform = origin_record.platform
|
||||
and squads_stats_states_action_info.leaderboard_type = origin_record.leaderboard_type
|
||||
),
|
||||
|
||||
prev_record as (
|
||||
select prev_action_id
|
||||
from prev_records_lag, origin_record
|
||||
where prev_records_lag.action_id = origin_record.action_id
|
||||
)
|
||||
|
||||
select
|
||||
coalesce(new_stats.name, old_stats.name) as "squadron_name",
|
||||
coalesce(new_stats.tag, old_stats.tag) as "tag",
|
||||
coalesce(new_stats.score, 0) as "total_experience",
|
||||
coalesce(old_stats.score, 0) as "total_experience_old",
|
||||
coalesce(new_stats.score, 0) - coalesce(old_stats.score, 0) as "total_experience_diff",
|
||||
coalesce(new_stats.leaderboard_type, old_stats.leaderboard_type) as "leaderboard_type",
|
||||
coalesce(new_stats.platform, old_stats.platform) as "platform"
|
||||
coalesce(new_stats.tag, old_stats.tag) as "tag",
|
||||
coalesce(new_stats.score, 0) as "total_experience",
|
||||
coalesce(old_stats.score, 0) as "total_experience_old",
|
||||
coalesce(new_stats.score, 0) - coalesce(old_stats.score, 0) as "total_experience_diff"
|
||||
from (
|
||||
select *
|
||||
from squads_stats_states
|
||||
where action_id = %(action_id)s) new_stats
|
||||
full join
|
||||
(
|
||||
select *
|
||||
from squads_stats_states
|
||||
where action_id in (
|
||||
select distinct squads_stats_states.action_id
|
||||
from squads_stats_states, (
|
||||
select timestamp, platform, leaderboard_type, action_id
|
||||
from squads_stats_states
|
||||
where action_id = %(action_id)s limit 1) sub1
|
||||
where
|
||||
squads_stats_states.platform = sub1.platform and
|
||||
squads_stats_states.leaderboard_type = sub1.leaderboard_type and
|
||||
squads_stats_states.action_id < sub1.action_id
|
||||
order by squads_stats_states.action_id desc
|
||||
limit 1)) old_stats
|
||||
on new_stats.squadron_id = old_stats.squadron_id
|
||||
select *
|
||||
from squads_stats_states_data
|
||||
where action_id = %(action_id)s
|
||||
) new_stats
|
||||
full join (
|
||||
select *
|
||||
from squads_stats_states_data, prev_record
|
||||
where action_id = prev_record.prev_action_id
|
||||
) old_stats
|
||||
on new_stats.squadron_id = old_stats.squadron_id
|
||||
where coalesce(new_stats.score, 0) - coalesce(old_stats.score, 0) <> 0
|
||||
order by coalesce(new_stats.score, 0) - coalesce(old_stats.score, 0) desc;"""
|
||||
|
||||
select_leaderboard_sum_history = """select
|
||||
sum(score)::bigint as "Score Sum",
|
||||
to_char(max(timestamp), 'YYYY-MM-DD HH24:MI:SS') as "Timestamp UTC"
|
||||
from squads_stats_states
|
||||
where leaderboard_type = %(LB_type)s and platform = %(platform)s
|
||||
group by action_id
|
||||
select_leaderboard_sum_history = """
|
||||
select
|
||||
sum(score)::bigint as "Score Sum",
|
||||
to_char(max(timestamp), 'YYYY-MM-DD HH24:MI:SS') as "Timestamp UTC"
|
||||
from squads_stats_states_data
|
||||
inner join squads_stats_states_action_info
|
||||
on squads_stats_states_action_info.action_id = squads_stats_states_data.action_id
|
||||
where leaderboard_type = 'cqc' and platform = 'PC'
|
||||
group by squads_stats_states_data.action_id
|
||||
order by "Timestamp UTC" desc
|
||||
limit 1000;
|
||||
"""
|
||||
|
||||
select_leaderboard_by_action_id = """select
|
||||
name as squadron_name,
|
||||
tag,
|
||||
rank,
|
||||
score,
|
||||
to_char(timestamp, 'YYYY-MM-DD HH24:MI:SS') as timestamp,
|
||||
leaderboard_type,
|
||||
platform,
|
||||
squadron_id
|
||||
from squads_stats_states
|
||||
where action_id = %(action_id)s
|
||||
select_leaderboard_by_action_id = """
|
||||
select
|
||||
name,
|
||||
rank,
|
||||
score,
|
||||
to_char(timestamp, 'YYYY-MM-DD HH24:MI:SS') as timestamp,
|
||||
leaderboard_type,
|
||||
platform,
|
||||
squadron_id
|
||||
from squads_stats_states_data
|
||||
inner join squads_stats_states_action_info
|
||||
on squads_stats_states_data.action_id = squads_stats_states_action_info.action_id
|
||||
where squads_stats_states_action_info.action_id = %(action_id)s
|
||||
order by score desc;
|
||||
"""
|
||||
|
||||
select_latest_leaderboard = """select
|
||||
name as squadron_name,
|
||||
tag,
|
||||
rank,
|
||||
score,
|
||||
to_char(timestamp, 'YYYY-MM-DD HH24:MI:SS') as timestamp,
|
||||
leaderboard_type,
|
||||
platform,
|
||||
squadron_id
|
||||
from squads_stats_states
|
||||
where action_id = (
|
||||
select max(action_id) as action_id
|
||||
from squads_stats_states
|
||||
where leaderboard_type = %(LB_type)s and platform = %(platform)s)
|
||||
order by score desc;
|
||||
select_latest_leaderboard = """
|
||||
with max_action_id as (
|
||||
select
|
||||
max(action_id) as action_id
|
||||
from squads_stats_states_action_info
|
||||
where
|
||||
leaderboard_type = 'cqc' and
|
||||
platform = 'PC'
|
||||
),
|
||||
|
||||
leaderboard as (
|
||||
select
|
||||
name as squadron_name,
|
||||
tag,
|
||||
rank,
|
||||
score,
|
||||
squadron_id,
|
||||
squads_stats_states_data.action_id as action_id
|
||||
from squads_stats_states_data, max_action_id
|
||||
where squads_stats_states_data.action_id = max_action_id.action_id
|
||||
)
|
||||
|
||||
select
|
||||
squadron_name,
|
||||
tag,
|
||||
rank,
|
||||
score,
|
||||
to_char(squads_stats_states_action_info.timestamp, 'YYYY-MM-DD HH24:MI:SS') as timestamp,
|
||||
squads_stats_states_action_info.leaderboard_type as leaderboard_type,
|
||||
squads_stats_states_action_info.platform as platform,
|
||||
squadron_id
|
||||
from leaderboard
|
||||
inner join squads_stats_states_action_info
|
||||
on squads_stats_states_action_info.action_id = leaderboard.action_id
|
||||
"""
|
||||
Reference in new issue
Block a user