Newsgroup: it.comp.appl.access
Titolo: raggruppamento per data

ho questo problema...
parto subito con esempio:
in un gestionale alberghiero devo visualizzare la disponibilità delle
camere libere e vorrei che la
visualizzazione delle date fosse visualizzata come l'esempio
sottostante
ho queste date
camera1:13-06-07
camera1:14-06-07
camera1:15-06-07
camera1:21-06-07
camera1:22-06-07
camera1:25-06-07
camera2:13-06-07
vorrei visualizzare e chiedo quindi se è possibile,
camera1 disponibile dal13-06-07  al15-06-07, dal 21-06-07  al
22-06-07, 25-06-07
camera2:13-06-07


Direi di sì, ma premetto che non sapendo come / dove vuoi visualizzare
il risultato cercato ti dò un'indicazione di massima.
Prima di tutto, se l'elenco delle disponibilità lo ottieni con un
recordset, puoi ad ogni loop del recordset verificare se il [giorno
del record n] = [giorno del record n-1] + 1 all'interno dello stesso
mese / anno (ovvero se 14=13+1).
In questo modo puoi costruire una stringa che ti riporta esattamente
ciò che cerchi (ovvero: se la condizione di cui sopra, allora la
stringa sarà: [stringa]=[stringa] & "disponibile dal ... al... ").
Lavoraci un pò, non è così complicato.
Resto sintonizzato, se hai problemi


Speravo ci fosse qualcosa di già realizzato.
Ti ringrazio per la delucidazione tempestiva e la tua disponibilità.
L'algoritmo l'avevo già in testa il problema è far interagire l'sql
con il vba per recuperare tale stringa.
Nuovamente ringrazio

 con il vba per recuperare tale stringa.
Non è così problematico: sempre premettendo che non so struttura del
codice, delle tabelle etc, in linea di massima:
1. select di tutti i record per cui non è prevista una prenotazione,
ordinata per camera e data (crescente) e raggruppata per mese
2. inizi a scorrere il recordset e valuti la condizione che ti dicevo,
relativa al n° del giorno
3. con una bella select case costruisci la stringa del risultato da
ottenere, valutando i casi in cui due giorni siano consequenziali o
meno (occhio al salto tra due mesi!)
4. record successivo fino alla fine del recordset
5. mostri la stringa.
Se vuoi una mano in più ricontattami, potremmo lavorare sul db (ehm...
che versione usi? Io sono al 97...)

Ecco qui: perfettamente testato!
nel caso in cui si abbiano date quali:
01/12/2007
02/12/2007
03/12/2007
07/12/2007
08/12/2007
09/12/2007
il risultato sarà:
dal 01/12/2007 al 03/12/2007; 07/12/2007; dal 08/12/2007 al 09/12/2007
Function concatenaDate(idCamera as Integer) As String
Dim dataIn As Date, dataFi As Date
Dim Rs As New ADODB.Recordset
Dim sql As string
Dim inizio As Boolean
Dim flag As Boolean
    sql = "SELECT data FROM tbPrenotazioni WHERE idCamera=" & idCamera
& " ORDER BY data ASC"
    Rs.Open sql, CurrentProject.Connection, adOpenKeyset,
adLockOptimistic
    concatenaDate = ""
    inizio = False
    flag = False
    Rs.MoveFirst
    While Not Rs.EOF
        If inizio = False Then
            inizio = True
            dataIn = Rs!data
            dataFi = Rs!data
        Else
            If dataFi = Rs!data Then
                dataFi = Rs!data
            ElseIf dataFi = Rs!data - 1 Then
                flag = true
                dataFi = Rs!data
            Else
                If flag = True Then
                    concatenaDate = concatenaDate & "dal " & dataIn &
" al " & dataFi & "; "
                    flag = False
                Else
                    concatenaDate = concatenaDate & dataFi & "; "
                End If
                dataIn = Rs!data
                dataFi = Rs!data
            End If
        End If
        Rs.MoveNext
    Wend
    If dataIn = dataFi Then
        concatenaDate = concatenaDate & dataFi & "; "
    Else
        concatenaDate = concatenaDate & "dal " & dataIn & " al " &
dataFi & "; "
    End If
    Rs.Close
    Set Rs = Nothing
    concatenaDate = left(concatenaDate, Len(concatenaDate) - 2)
End Function