def calculate_filter_max_counters(cls, filters):
# create string of prefixes to place into sql statement
condition = " UNION ".join(["SELECT '{}' AS a".format(prefix) for prefix in filters])
filter_max_calculation = """
SELECT PMC.instance, MIN(PMC.counter)
FROM
(
SELECT dmc.instance_id as instance, MAX(dmc.counter) as counter, filter as filter_partition
FROM {dmc_table} as dmc, (SELECT T.a as filter FROM ({filter_list}) as T)
WHERE filter LIKE dmc.partition || '%'
GROUP BY instance, filter_partition
) as PMC
GROUP BY PMC.instance
HAVING {count} = COUNT(PMC.filter_partition)
""".format(dmc_table=cls._meta.db_table,
filter_list=condition,
count=len(filters))
with connection.cursor() as cursor:
cursor.execute(filter_max_calculation)
return dict(cursor.fetchall())
评论列表
文章目录