Sparky# ha scritto:
Facciamo un passo indietro
Ho X gare ( appartenenti a diverse discipline, specialità, categorie ecc dove ognuno ha regolamento e punteggio diverso)
Mi vengono passati i risultati di ogni gara dove possono partecipare sempre gli stessi atleti e/o diversi
Ho tutte le varie tabelle atleti, risultati, discipline punteggi ecc con i loro relativi ID
Ora per avere tutto in fila, non dover ogni volta cercare tutto con le varie query ecc ho una tabella finale dove ogni X periodo faccio un UPDATE
dove riporto per ogni riga disciplina, codice atleta, punteggio_1 ... punteggio_25, totale
Ora ciò che devo fare è memorizzare in scarto_1 e scarto_2 i due valori minori selezionati tra i 25 punteggi
Non mi è chiarissima la cosa... Da questo post sembra che tu abbia:
- I dati puntuali, ovvero una tabella strutturata bene coi i suoi ID e i suoi punteggi (1 punteggo per ogni atleta/gara/disciplina)
- I dati raggruppati che vengono aggiornati ogni tanto da una UPDATE che prende i vari dati puntuali (vedi sopra) e li porta in una struttura denormalizzata per velocizzare l'interrogazione
Se così fosse, la tua logica ci sta ed è perfettamente concesso di avere tabelle denormalizzate per questioni di performance (poi si tratterebbe di valutare se questa sia la casistica o meno ma esula dal post).
Però a quel punto i dati che stai cercando (scarti) ti viene più facile calcolarli a partire dai dati puntuali: come diceva Alka, ordini e prendi i primi due valori.
Se invece hai i dati puntuali scritti da qualche parte fuori dal DB e nel DB hai messo solo i dati raggruppati, allora concordo sul fatto che il DB sia progettato male.
Ad ogni modo potresti sempre verificare se ci sia una funzione del DB che ti converta le colonne in righe.
Nel caso tu stia usando SQL-Server potresti usare la funzione "UNPIVOT" per portare i dati da colonne a righe, quindi ordinare, ...
Più di così non saprei cosa consigliarti