def METHOD_NAME(table: str, fields: str, regions: List[str]):
    # a helper function to query `fluview` and `fluview_imputed` individually
    # parameters
    # basic query info
    order = "fv.`epiweek` ASC, fv.`region` ASC, fv.`issue` ASC"
    params: Dict[str, Any] = dict()
    # build the epiweek filter
    condition_epiweek = filter_integers("fv.`epiweek`", epiweeks, "epiweek", params)
    # build the region filter
    condition_region = filter_strings("fv.`region`", regions, "region", params)
    if issues:
        # build the issue filter
        condition_issue = filter_integers("fv.`issue`", issues, "issues", params)
        # final query using specific issues
        query = f"SELECT {fields} FROM {table} WHERE ({condition_epiweek}) AND ({condition_region}) AND ({condition_issue}) ORDER BY {order}"
    elif lag is not None:
        # build the lag filter
        condition_lag = "(fv.`lag` = :lag)"
        params["lag"] = lag
        # final query using lagged issues
        query = f"SELECT {fields} FROM {table} WHERE ({condition_epiweek}) AND ({condition_region}) AND ({condition_lag}) ORDER BY {order}"
    else:
        # final query using most recent issues
        subquery = f"(SELECT max(`issue`) `max_issue`, `epiweek`, `region` FROM {table} WHERE ({condition_epiweek}) AND ({condition_region}) GROUP BY `epiweek`, `region`) x"
        condition = "x.`max_issue` = fv.`issue` AND x.`epiweek` = fv.`epiweek` AND x.`region` = fv.`region`"
        query = f"SELECT {fields} FROM {table} JOIN {subquery} ON {condition} ORDER BY {order}"
    return query, params