3.836 messaggi dal 28 gennaio 2003
Data una tabella: comune, data, pioggia
vorrei una colonna aggiuntiva, pioggia cumulata ragruppata per comune.
Sotto il codice usando il DataTable.
E' possibile usare LINQ per ottenere la stessa cosa?

Dim dt As DataTable = ora.GetDataTable(gl.StringaConnessione_PIETRO, "SELECT comune, data, pioggia FROM precipitazioni order by comune, data")
dt.Columns.Add(New DataColumn("progressivo", GetType(Double)))
Dim dv As New DataView(dt)
dv.Sort = "comune, data"

'l.DataViewInPlaceHolder(Me.PlaceHolder1, dv)

If dv.Count > 0 Then
  'dati iniziali 1° riga
  Dim comune0 As String = NullToString(dv(0)("comune"))
  Dim progressivo0 As Double = CDbl(NullToZero(dv(0)("pioggia")))
  dv(0)("progressivo") = progressivo0

  For i As Integer = 1 To dv.Count - 1
    Dim comune As String = NullToString(dv(i)("comune"))
    Dim pioggia As Double = CDbl(NullToZero(dv(i)("pioggia")))

    If comune <> comune0 Then
      comune0 = comune
      progressivo0 = pioggia
    Else
      progressivo0 += pioggia
    End If
    dv(i)("progressivo") = progressivo0
  Next
  dv.Table.AcceptChanges()
End If
l.DataViewInPlaceHolder(Me.PlaceHolder1, dv)

Pietro
11.097 messaggi dal 09 febbraio 2002
Contributi
Ciao Pietro,
se ho capito bene a te serve una colonna che contenga il running total della pioggia.
Credo che la maniera più efficiente di farlo sia modificare la query affinché includa questa ulteriore colonna. Se stai usando Sql Server ti sposto il thread nell'altra sezione in modo che ti aiuta Andrea Montanari che è molto ferrato su queste cose.

ciao,
Moreno
Modificato da BrightSoul il 08 agosto 2018 14.02 -

Enjoy learning and just keep making
3.836 messaggi dal 28 gennaio 2003
No! la fonte dati è un file csv con i dati di : sensore, data, pioggia_giornaliera.
A me serve il dato cumulato, giorno per giorno, per ogni sensore.

Ho fatto delle prove (solo con qualche dato) in una tabella oracle, e conosco la sintassi per ricavare quello che chiedo.

Ho provato con il DataTable e ho visto che funziona alla grande, ma davvero bene: leggo i dati da excel o csv, molti, calcolo il cumulato, tolgo - aggiungo colonne, ordino, filtro, ne faccio una tabella pivot, etc. etc. Davvero un oggetto utile questo DataTable.

Solo a scopo di studio, giusto per provare linq, volevo fare la stessa cosa.
Ho guardato i vecchi esempi (sono sicuro che mi li hai forniti tu), ma non ho trovato nulla al riguardo.
In rete ho trovato qualcosa ma in c# e proprio non ci sono riuscito a convertirlo in basic.

Per finire, un doveroso ringraziamento. Ciao.

Pietro
11.097 messaggi dal 09 febbraio 2002
Contributi
Ciao Pietro, prego.


In rete ho trovato qualcosa ma in c#

Posta i link, vediamo che si può fare. Non ho ancora avuto modo di ragionarci... a grandi linee si potrebbe usare l'extension method GroupBy di LINQ per partizionare i dati sui vari comuni e poi usare AsParallel per predisporre il calcolo in maniera parallela, in modo che sfrutti tutti i core della CPU per completarsi più rapidamente. Il calcolo in sé potrebbe avvenire con l'extension method Aggregate.

ciao,
Moreno
Modificato da BrightSoul il 09 agosto 2018 08.55 -

Enjoy learning and just keep making
3.836 messaggi dal 28 gennaio 2003
BrightSoul ha scritto:
Ciao Pietro, prego.


In rete ho trovato qualcosa ma in c#

Posta i link, vediamo che si può fare. Non ho ancora avuto modo di ragionarci... a grandi linee si potrebbe usare l'extension method GroupBy di LINQ per partizionare i dati sui vari comuni e poi usare AsParallel per predisporre il calcolo in maniera parallela, in modo che sfrutti tutti i core della CPU per completarsi più rapidamente. Il calcolo in sé potrebbe avvenire con l'extension method Aggregate.

ciao,
Moreno
Modificato da BrightSoul il 09 agosto 2018 08.55 -


Eh! chissà da dove l'ho presa! non ricordo più.
Comunque non preoccuparti, forse non ne vale la pena. Il buon vecchio modo di scansionare un vettore ordinato risolve bene, con più righe di codice, ma risolve.
Ciao.

Pietro

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.