Navigazione

    Privacy - Termini e condizioni
    © 2020 Search On Media Group S.r.l.
    • Registrati
    • Accedi
    • CATEGORIES
    • Discussioni
    • Non letti
    • Recenti
    • Hashtags
    • Popolare
    • Utenti
    • Stream
    • Interest
    • Categories
    1. Home
    2. Categorie
    3. Coding e Sistemistica
    4. Coding
    5. [SQL] Ordinare i record in base al confronto di due date
    Questa discussione è stata cancellata. Solo gli utenti con diritti di gestione possono vederla.
    • S
      sherlock User Attivo • 4 apr 2007, 08:52 ultima modifica di

      [SQL] Ordinare i record in base al confronto di due date

      ciao a tutti!
      ho il problema di ordinare i dati provenienti da una query SQL in una tabella (...che fin qui sembra banale!), tuttavia (almeno a quanto so io!) non posso ordinarli direttamente dalla SELECT SQL perchè l'ordinamento si basa su un campo calcolato a partire dalla base dati.
      Mi spiego meglio, nella base dati ho il campo data inizio e data approvazione, quando effettuo la query in automatico la pagina asp calcola la data scadenza a partire dalla data inizio o dalla data approvazione + xx giorni. La tabella che ne risulta deve essere ordinata per data di scadenza!
      I dati della query sql li appoggio subito in un array per poter fare la paginazione dei risultati stessi. Ora non so come posso ordinare questa tabella!
      Aspetto soccorso!!!!!
      Grazie,

      Marco

      0 Miglior Risposta Ringrazia Cita Rispondi

        1 Risposta Ultima Risposta
        Caricamento altri post
        Rispondi
        • Topic risposta
        Effettua l'accesso per rispondere
        • Da Vecchi a Nuovi
        • Da Nuovi a Vecchi
        • Più Voti
         

      • I
        icchese User Attivo • 4 apr 2007, 14:27 ultima modifica di

        o aggiungi un campo "data_scadenza" o riversi i risultati in una tabella temporanea e li riordini........

        sempre se ho capito bene il problema ....

        😉

        0 Miglior Risposta Ringrazia Cita Rispondi

          1 Risposta Ultima Risposta
        • S
          sherlock User Attivo • 4 apr 2007, 15:25 ultima modifica di

          hai capito perfettamente e ti ringrazio del consiglio...volevo proprio evitare sia il campo data_scadenza (in quanto è un campo calcolato al volo) sia di dover riversare su un'altra tabella...
          ma in questa seconda ipotesi tu come faresti?
          grazie!

          Marco

          0 Miglior Risposta Ringrazia Cita Rispondi

            1 Risposta Ultima Risposta
          • paocavo
            paocavo Moderatore • 4 apr 2007, 16:01 ultima modifica di
            
            select (data_inizio + 20) AS Scadenza from tabella
            order by (data_inizio + 20) DESC;
            
            

            Dovrebbe funzionare...:figo:

            :ciauz:

            0 Miglior Risposta Ringrazia Cita Rispondi

              1 Risposta Ultima Risposta
            • S
              sherlock User Attivo • 5 apr 2007, 08:57 ultima modifica di

              ciao Paolo!
              grazie per il suggerimento...il problema è che, oltre al problema del +xx giorni, l'ordinamento va fatto su due colonne congiuntamente in questo modo:
              ID COLONNA1 COLONNA2
              1 01/01/2007
              2 05/04/2007
              3 02/03/2007 01/11/2007
              4 31/12/2006

              il corretto ordine è: 3,4,1,2!
              so che è un gran caos...
              grazie!!

              Marco

              0 Miglior Risposta Ringrazia Cita Rispondi

                1 Risposta Ultima Risposta
              • paocavo
                paocavo Moderatore • 5 apr 2007, 10:00 ultima modifica di

                Bel casino!

                Comunque la soluzione esiste ed è questa (l'ho testata):

                
                SELECT tbldate.id_campo, 
                           **IIf(not IsNull([data2] and data1>data2),[data2]+20,[data1]+20) **AS Scadenza
                FROM tbldate
                ORDER BY **IIf(not IsNull([data2] and data1>data2),[data2]+20,[data1]+20)**;
                
                

                Tutto questo nell'ipotesi che:

                1. Data1 (cioè colonna1) sia sempre NOT NULL e Data2 può assumere valori NULL
                2. Se Data2 esiste allora deve essere data1>data2
                3. Il time-out della scadenza sia di 20 giorni.

                Come ho già detto in post precedenti all'interno dell'SQL di Access si possono fare cose molto potenti, basta studiare tutte le funzioni elencate nel generatore di espressioni attivabile cliccando sulla "bacchetta magica" che appare nella barra degli strumenti di "Visualizzazione struttura della Query".

                Suggerimento: Per velocizzare l'esecuzione della query verifica che su Data1 e Data2 sino entrambi campi che accettano valori Null e che siano indicizzati (Valori duplicati: si!)

                PS: C'è un errore nella tabella che hai presentato, probabilmente il valore di colonna2 del terzo record è 01/11/200**6 **altrimenti non ha senso l'ordine: 3,4,1,2 😉

                :ciauz:

                0 Miglior Risposta Ringrazia Cita Rispondi

                  1 Risposta Ultima Risposta
                • S
                  sherlock User Attivo • 5 apr 2007, 11:02 ultima modifica di

                  ...in effetti era 2006!!!
                  grazie Paolo, ti adoro! :perfavore:

                  funziona a meraviglia...ora per le prossime provo anch'io con la bacchettina magica di Access!!

                  Marco

                  0 Miglior Risposta Ringrazia Cita Rispondi

                    1 Risposta Ultima Risposta
                  • paocavo
                    paocavo Moderatore • 5 apr 2007, 12:23 ultima modifica di

                    @sherlock said:

                    ...in effetti era 2006!!!
                    grazie Paolo, ti adoro! :perfavore:
                    esagerato!...

                    funziona a meraviglia...ora per le prossime provo anch'io con la bacchettina magica di Access!!

                    ...ecco bravo! 😉

                    :ciauz:

                    0 Miglior Risposta Ringrazia Cita Rispondi

                      1 Risposta Ultima Risposta
                    Caricamento altri post
                    Rispondi
                    • Topic risposta
                    Effettua l'accesso per rispondere
                    • Da Vecchi a Nuovi
                    • Da Nuovi a Vecchi
                    • Più Voti