[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;
|
||||
|
||||
// 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(
|
||||
"SELECT a.overall_score
|
||||
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
|
||||
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]
|
||||
);
|
||||
$scores = array_map(fn($r) => (float) $r['overall_score'], $rows);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user