我希望这不是一个口是心非,但我还没有能够找到这样的例子在给定的答案。我希望熟练的sql家伙将能够帮助我很容易,因为问题是最有可能是我。
请注意,我真的很努力地去理解系统中提到的类似问题,但是没有一个问题像我认为我需要的那样把我推到脸上。请理解,我对SQL很弱,所以也许这是一个正确的答案。
我们有两张table:
azure_票证:|票证ID|系统标签|地位||- ------|- ------|- ------||小行星1209|捷克共和国发布日期:2023年1月19日;IT发布日期2023年1月24日|放行||小行星121|捷克共和国发布日期:2023年1月19日;制造商_发布日期_2023年1月24日|关闭|
Azure票证历史版本eav:|票证ID|地位|天数_计数||- ------|- ------|- ------||小行星1209|舞台上|十二||小行星121|舞台上|二十五|
现在,第一个表获得了ticket_id和system_tags(当然还有更多列,但对于这个计算来说,这是必需的)。
我需要的是一个平均天数为所有票与给定的系统标签(仅为单个国家,在这种情况下只有捷克共和国)的状态"舞台上"。
我们正在使用元数据库,所以我能够爬到下面的SQL我的方式:
SELECT
`Table A`.`Tags A1` AS `Tags A`,
`Question 172`.`Azure System Tags` AS `Tags B`,
`Question 172`.`Days On Stage` AS `Days On Stage`
FROM (
SELECT DISTINCT regexp_substr(system_tags, concat({{country}}, '_released_[^;]*')) as "Tags A1"
FROM azure_tickets
WHERE azure_tickets.system_tags LIKE concat("%", {{country}}, "_released_%")
)
`Table A`
LEFT JOIN (
SELECT
regexp_substr(`Table B`.`system_tags`, concat({{country}}, '_released_[^;]*')) AS `Azure System Tags`,
SUM(`Table A`.`days_count`) / COUNT(`Table A`.`days_count`) AS `Days On Stage`
FROM (
SELECT `azure_tickets_history_releases_eav`.`ticket_id`,
`azure_tickets_history_releases_eav`.`days_count`
FROM `azure_tickets_history_releases_eav`
WHERE `ticket_id` IN (
SELECT `azure_tickets`.`ticket_id`
FROM `azure_tickets`
WHERE `azure_tickets`.`system_tags` LIKE concat("%", 'CZ_released_2022/12/14', "%") AND
`azure_tickets`.`state` IN ("For release", 'Closed') AND
`azure_tickets`.`team_project` NOT IN ('mobile-team','cloud-infrastructure','bart-team','ipf-team','integration-backoffice-team','web-measurements-team','devops-team','ecommerce-sla','qaa-team')) AND
`country` = {{country}} AND
`status` = "On Stage"
)
`Table A`
JOIN `azure_tickets` AS `Table B` ON `Table A`.`ticket_id` = `Table B`.`ticket_id`
)
`Question 172` ON `Table A`.`Tags A1` = `Question 172`.`Azure System Tags`
几乎给了我想要的。看起来像这样:|标签A|标签B|舞台天数||- ------|- ------|- ------||捷克共和国发布日期2022年12月14日|捷克共和国发布日期2022年12月14日|二十五点七四分||捷克共和国发布日期2022年5月12日||||捷克共和国发布日期2022年7月25日||||捷克共和国发布日期2022年7月28日|||
正如您在第23行所看到的,有一个带有硬编码标记的where子句(CZ_released_2022/12/14)。我需要的是将此硬编码标记替换为列值Tag A(或B,无所谓),但是无论我如何尝试更新sql,我都会在子选择中得到未知列,例如"Unknown column 'Table A. Tags A1' in 'where clause'"。
我不确定是否需要前面的查询(即问题172,我可以按部分回答,但我认为原则有问题,而不是子查询)。
我将非常感谢您的输入如何继续与此,我的想法,因为我不使用SQL和元数据库太频繁。
1条答案
按热度按时间ovfsdjhp1#
所以我错了,我以为这个问题很容易解决。下面是我解决这个问题的方法。我在后端计算了所有数据。这是一个对我来说也对你来说是一个智慧-如果计算太复杂,在后端简化它。