このようなクエリがあり、多くの情報が得られます
mysql> SELECT impacted.incident_id AS id,
-> impacted.severity_id as sev,
-> ((UNIX_TIMESTAMP(incident.stable_time) - UNIX_TIMESTAMP(incident.start_time)) / 60) AS duration,
-> ops.department.name AS department,
-> ops.country.name AS country
-> FROM incident
-> LEFT JOIN incident_impactedDepartments AS impacted ON incident.incident_id = impacted.incident_id
-> LEFT JOIN incident_impacted ON incident.incident_id = incident_impacted.incident_id
-> LEFT JOIN ops.department ON impacted.dept_id = ops.department.dept_id
-> LEFT JOIN ops.country ON incident_impacted.entity_id = ops.country.country_id
-> WHERE incident.status in ('OPEN','STABLE','ALL CLEAR','POST MORTEM COMPLETE')
-> AND incident.incident_id in (35880,35992,33304);
+-------+------+-----------+-------------------+---------------+
| id | sev | duration | department | country |
+-------+------+-----------+-------------------+---------------+
| 33304 | 1 | 29.0000 | Marketing | NULL |
| 33304 | 1 | 29.0000 | Marketing | GLOBAL |
| 33304 | 1 | 29.0000 | Accounting | NULL |
| 33304 | 1 | 29.0000 | Accounting | GLOBAL |
| 35880 | 1 | 109.5833 | Marketing | Argentina |
| 35880 | 1 | 109.5833 | Marketing | Brazil |
| 35880 | 1 | 109.5833 | Marketing | Canada |
| 35880 | 1 | 109.5833 | Marketing | Chile |
| 35880 | 1 | 109.5833 | Marketing | Mexico |
| 35880 | 1 | 109.5833 | Marketing | Peru |
| 35880 | 1 | 109.5833 | Marketing | United States |
| 35880 | 1 | 109.5833 | Accounting | Argentina |
| 35880 | 1 | 109.5833 | Accounting | Brazil |
| 35880 | 1 | 109.5833 | Accounting | Canada |
| 35880 | 1 | 109.5833 | Accounting | Chile |
| 35880 | 1 | 109.5833 | Accounting | Mexico |
| 35880 | 1 | 109.5833 | Accounting | Peru |
| 35880 | 1 | 109.5833 | Accounting | United States |
| 35880 | 2 | 109.5833 | Finance | Argentina |
| 35880 | 2 | 109.5833 | Finance | Brazil |
| 35880 | 2 | 109.5833 | Finance | Canada |
| 35880 | 2 | 109.5833 | Finance | Chile |
| 35880 | 2 | 109.5833 | Finance | Mexico |
| 35880 | 2 | 109.5833 | Finance | Peru |
| 35880 | 2 | 109.5833 | Finance | United States |
| 35992 | 3 | 1295.2667 | Accounting | Italy |
+-------+------+-----------+-------------------+---------------+
インシデント 35880 が財務の 7 か国に影響を与えていることがわかります。私の目標は、インシデントごとに次の情報を収集することです。
+-------+------+----------+------------------------------+---------------------------------------------------------+
| id | sev | duration | department | country |
+-------+------+----------+------------------------------+---------------------------------------------------------+
| 35880 | 1 | 109.5833 | Marketing,Accounting,Finance | Argentina,Brazil,Canada,Chile,Mexico,Peru,United States |
+-------+------+----------+------------------------------+---------------------------------------------------------+
そして、私は次のようなクエリでそうすることができます:
SELECT id, sev, duration, GROUP_CONCAT(DISTINCT department SEPARATOR ',') as department, GROUP_CONCAT(DISTINCT country SEPARATOR ',') as country
FROM
(SELECT impacted.incident_id AS id,
impacted.severity_id as sev,
((UNIX_TIMESTAMP(incident.stable_time) - UNIX_TIMESTAMP(incident.start_time)) / 60) AS duration,
ops.department.name AS department,
ops.country.name AS country
FROM incident
LEFT JOIN incident_impactedDepartments AS impacted ON incident.incident_id = impacted.incident_id
LEFT JOIN incident_impacted ON incident.incident_id = incident_impacted.incident_id
LEFT JOIN ops.department ON impacted.dept_id = ops.department.dept_id
LEFT JOIN ops.country ON incident_impacted.entity_id = ops.country.country_id
WHERE incident.status in ('OPEN','STABLE','ALL CLEAR','POST MORTEM COMPLETE')
AND incident.incident_id in (35880))
AS q1
ただし、プルされる重大度は、ID 35880 全体の重大度です。参照してください、35880 は異なるレベルで複数の部門に影響を与えました。特定の部門のクエリの重大度とマスター ID の重大度を確認できるようにしたいと考えています。ただし、クエリで部門 ID を指定すると、問題が発生します。
mysql> SELECT id, sev, duration, GROUP_CONCAT(DISTINCT department SEPARATOR ',') as department, GROUP_CONCAT(DISTINCT country SEPARATOR ',') as country
-> FROM
-> (SELECT impacted.incident_id AS id,
-> impacted.severity_id as sev,
-> ((UNIX_TIMESTAMP(incident.stable_time) - UNIX_TIMESTAMP(incident.start_time)) / 60) AS duration,
-> ops.department.name AS department,
-> ops.country.name AS country
-> FROM incident
-> LEFT JOIN incident_impactedDepartments AS impacted ON incident.incident_id = impacted.incident_id
-> LEFT JOIN incident_impacted ON incident.incident_id = incident_impacted.incident_id
-> LEFT JOIN ops.department ON impacted.dept_id = ops.department.dept_id
-> LEFT JOIN ops.country ON incident_impacted.entity_id = ops.country.country_id
-> WHERE incident.status in ('OPEN','STABLE','ALL CLEAR','POST MORTEM COMPLETE')
-> AND incident.incident_id in (35880)
-> AND impacted.dept_id = 1473)
-> AS q1;
+-------+------+----------+------------+---------------------------------------------------------+
| id | sev | duration | department | country |
+-------+------+----------+------------+---------------------------------------------------------+
| 35880 | 2 | 109.5833 | Finance | Argentina,Brazil,Canada,Chile,Mexico,Peru,United States |
+-------+------+----------+------------+---------------------------------------------------------+
影響を受ける部門の完全なリストを取得できなくなりました。
これには 2 つの個別のクエリが必要ですか?