[FIX] sectorBenchmark: dedup pool via subquery correlata (finding review, fix reale)
Il commit precedente NON conteneva questo fix (Edit fallito su ancora errata). Ora applicato: JOIN su MAX(completed_at) -> subquery correlata (ultimo completato, tie-break id, LIMIT 1), una sola riga per org anche con timestamp identici. E2E: org con 2 assessment stesso TS -> peers=4 (non 5). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
897a5a4339
commit
3ed71ebb7a
@ -175,16 +175,20 @@ class DashboardController extends BaseController
|
|||||||
);
|
);
|
||||||
$myScore = $mine ? (float) $mine['overall_score'] : null;
|
$myScore = $mine ? (float) $mine['overall_score'] : null;
|
||||||
|
|
||||||
|
// Esattamente UN punteggio per org (ultimo completato, tie-break su id): la subquery
|
||||||
|
// correlata evita il duplicato che il JOIN su MAX(completed_at) produceva quando due
|
||||||
|
// assessment della stessa org condividono identico timestamp.
|
||||||
$rows = Database::fetchAll(
|
$rows = Database::fetchAll(
|
||||||
"SELECT a.overall_score
|
"SELECT a.overall_score
|
||||||
FROM assessments a
|
FROM assessments a
|
||||||
JOIN (
|
|
||||||
SELECT organization_id, MAX(completed_at) mx
|
|
||||||
FROM assessments WHERE status='completed'
|
|
||||||
GROUP BY organization_id
|
|
||||||
) last ON last.organization_id = a.organization_id AND last.mx = a.completed_at
|
|
||||||
JOIN organizations o ON o.id = a.organization_id
|
JOIN organizations o ON o.id = a.organization_id
|
||||||
WHERE o.is_active = 1 AND o.sector = ? AND a.status='completed' AND a.overall_score IS NOT NULL",
|
WHERE o.is_active = 1 AND o.sector = ? AND a.status='completed' AND a.overall_score IS NOT NULL
|
||||||
|
AND a.id = (
|
||||||
|
SELECT a2.id FROM assessments a2
|
||||||
|
WHERE a2.organization_id = a.organization_id
|
||||||
|
AND a2.status='completed' AND a2.overall_score IS NOT NULL
|
||||||
|
ORDER BY a2.completed_at DESC, a2.id DESC LIMIT 1
|
||||||
|
)",
|
||||||
[$sector]
|
[$sector]
|
||||||
);
|
);
|
||||||
$scores = array_map(fn($r) => (float) $r['overall_score'], $rows);
|
$scores = array_map(fn($r) => (float) $r['overall_score'], $rows);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user