Cercare valore minimo

di il
12 risposte

Cercare valore minimo

Salve
da poco mi sto avvicinando alla programmazione e mi sono imbattuto in questo problema

Ho una tabella di un DB dove per ogni riga ho X campi punteggi ( punteggio_1, punteggio_2, punteggio_3 etc)
Per ogni riga devo cercare i due valori minimi ed inserirli in scarto_1 scarto_2, ovviamente se in scarto_1 ho inserito il valore di punteggio_1 in scarto 2 potrò inserire o punteggio_2 o punteggio_3

Ovviamente i punteggi potrebbero anche essere uguali (puntegio_1 (80), punteggio_2 (80), punteggio_3 (100) ) quindi scarto_1 sarà = punteggio_1(80), scarto_2 sarà = punteggio_2 (80)

P.S: inoltre l'operazione di cercare lo scarto va eseguita solo se la riga ha almeno Y punteggi


Grazie mille per l'aiuto

12 Risposte

  • Re: Cercare valore minimo

    Ma che db è? Non devi inserire più valori in un solo campo ma in tanti record.
  • Re: Cercare valore minimo

    Sparky# ha scritto:


    Ho una tabella di un DB dove per ogni riga ho X campi punteggi [...]
    Io credo di non aver capito praticamente nulla.
    Qual è l'obiettivo di questa struttura dati e di questo programma?

    Magari descriverlo in altro modo potrebbe chiarire meglio...
  • Re: Cercare valore minimo

    Ciao Il DB e MSSQL

    ma forse mi sono spiegato male
    Ho una tabella cosi formata
    ATLETA / COD_ATLETA / PUNTEGGIO_1 / PUNTEGGIO_2 / PUNTEGGIO_3 ..... / PUNTEGGIO_25 / SCARTO_1 / SCARTO_2


    Ora ciò che devo fare e selezionare SCARTO_1 e SCARTO_2

    Se l'Atleta ha minimo X punteggi vado a scegliere i 2 punteggi minori (scarto_1 / scarto_2)

    Esempio
    LUCA / 15836 / 80 / 100 / 30 / 25 / 60 / 45 / 18 / 9 / 10 / 20 / ......... / 9 / 10
    ERNESTO / 26359 / 100 / 18 / 18 / 25 / 36 ...................................../ 18 / 18
  • Re: Cercare valore minimo

    Il DB è progettato male. Devi avere un Id Atleta e una seconda tabella con questo Id correlato con un punteggio per record

    TabAtleti
    Idatleta 1 nome pinco ....

    e
    TabPunteggi
    idatleta 1 punteggio 8

    a grandi linee...
  • Re: Cercare valore minimo

    oregon ha scritto:


    TabPunteggi
    idatleta 1 punteggio 8
    Con questa struttura peraltro, mettendo un record per ogni combinazione atleta/punteggio, sarebbe facile sia contarli sia trovare i due scarti: basterebbe mettere i record in ordine crescente di punteggio per lo stesso atleta e prendere i primi due disponibili con una banale TOP (senza la necessità di memorizzarli obbligatoriamente e inutilmente).
  • Re: Cercare valore minimo

    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
  • Re: Cercare valore minimo

    Hai sbagliato a creare quel tabellone stile excel.
    Se hai un db organizzato bene devi usare quello con apposite query.
  • Re: Cercare valore minimo

    @sparky, un database NON e' come un foglio Excel, ANCHE se SEMBRA che entrambi trattino dati aventi la stessa forma.

    E' come dire che una ragazza BIONDA e' come una birra BIONDA solo perche' entrambi gli oggetti sono BIONDI

    I nel database RELAZIONALE i dati vanno strutturati secondo le regole della Teoria relazionale dei dati, e vanno interrogati secondo le regole dell'Algebra relazionale.

    Trovi tutto su Wikipedia.

    Il tuo attuale approccio complica in modo ESPONENZIALE la soluzione del problema, anche se a te SEMBRA che funzioni.
    NON funziona.
  • Re: Cercare valore minimo

    Ok grazie
  • Re: Cercare valore minimo

    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
  • Re: Cercare valore minimo

    Questa discussione perché è pubblicata nella sezione C#?
  • Re: Cercare valore minimo

    PiGi78 ha scritto:


    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
    Esatto la mia logica è stata proprio questa di raggruppare i dati da una parte
    ora però mi ero "fissato" di dover cercare i dati in quella tabella
    quando invece bastava cercarli nell'altra e poi copiarli


    Grazie mille
Devi accedere o registrarti per scrivere nel forum
12 risposte