Aktuellster Datensatz von jeder "Anlage" auflisten

  • VB.NET

Es gibt 88 Antworten in diesem Thema. Der letzte Beitrag () ist von schnibli.

    Aktuellster Datensatz von jeder "Anlage" auflisten

    Hallo Miteinander

    Ich hab leider kein besseren Titel für meine Frage gefunden.

    Meine Access Tabelle:

    AnlagenNr. ¦ Wer: ¦ Datum
    1 ¦ Ich ¦ 1.11.2012
    2 ¦ Du ¦ 3.11.2012
    3 ¦ Ich ¦ 3.11.2012
    1 ¦ Du ¦ 4.11.2012
    2 ¦ Ich ¦ 5.11.2012
    3 ¦ Du ¦ 7.11.2012



    Nun hätte ich gerne, wenn in einem Datagridview die Aktuellsten Daten eine Anlage erscheinen. d.h.

    AnlagenNr. ¦ Wer: ¦ Datum
    1 ¦ Ich ¦ 4.11.2012
    2 ¦ Du ¦ 5.11.2012
    3 ¦ Ich ¦ 7.11.2012



    Kann mir jemand Helfen?


    gruss
    Also, ich habe eine Tabelle wo jede Arbeit eingetragen wird... das heisst jede Anlage hat mehrere Datensätze, von diesen Datensätzen einer Anlage, möchte ich den Aktuellsten herauslesen (Die Datensätze beinhalten alle ein Datum, nach diesem Datum soll er den aktuellsten herauslesen) und dies für alle Anlagen die auf der Tabelle vorkommen.

    d.h. wen z.b. die Anlage 1 drei datensätze beitzt (10.02.2000 ; 10.02.2002 ; 10.02.2004) soll er mir denjenigen vom 10.02.2004 ausgeben)
    Irgendwie so:

    SQL-Abfrage

    1. SELECT AnlNr, Max(Datum), Wer From Tabelle GROUP BY AnlNr, Wer
    Oder vielleicht auch irgendwie anders (aber zumindest ähnlich).

    So was mach ich immer mit dem Wizzard "Abfrage erstellen" von Access, dann kommt von alleine das richtige SQL-Statement heraus.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    ich hab mal was probiert mittm Minikass-Projekt von DataExpressions
    zusätzliche Tabpage drangemacht und das TestMenü gibt dem DGV nun ein gefiltertes Dataview, was zu jedem Bon den Posten filtert, der die höchste Anzahl aufweist:

    VB.NET-Quellcode

    1. Case Sender Is TestToolStripMenuItem
    2. Dim postens = From rw In MiniKassDts.Posten Where rw.Anzahl = Aggregate rw2 In rw.BonRow.GetPostenRows Into Max(rw2.Anzahl)
    3. grdMaxPosten.DataSource = postens.AsDataView
    Dateien
    Hallo, eine frage habe ich nocht.

    Ich suche in der Spalte Datum nach "Max" jedoch zeigt er mir alle Datensätze an (auch nach dem ausführen)
    Kann es damit zusammenhängen, dass die spalte als Datum Formatiert ist?

    VB.NET-Quellcode

    1. Dim postens = From rw In _DB_AnlagenDatenDataSet1.tblServiceDaten Where rw.ServiceDatum = Aggregate rw2 In rw.tblAnlagenNrRow.GettblServiceDatenRows Into Max(rw.ServiceDatum)
    2. AktuellDataGridView.DataSource = postens.AsDataView
    ...probiere es einmal so:

    VB.NET-Quellcode

    1. Dim List As New List(Of Date)
    2. Dim tmpList = From rw In _DB_AnlagenDatenDataSet1.tblServiceDaten Group By rw.AnlagenNummer Into Max(rw.ServiceDatum)
    3. For Each e In tmpList : List.Add(e.Max)) : Next
    4. Dim postens = From rw In _DB_AnlagenDatenDataSet1.tblServiceDaten Where List.Contains(rw.ServiceDatum)
    5. AktuellDataGridView.DataSource = postens.AsDataView
    ist aber ungetestet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    Hallo vb1963.

    So funktioniert es nicht ganz, es wird mir das ganze dgv geleert (keine Daten werden angezeigt).

    Was da ja noch fehlt ist: er muss ja zuerst die "AnlagenNR" suchen.


    Er soll mir ja das Aktuelle Datum jeder AnlagenNr ausgeben :s

    Edit:

    Habe es wie folgt angepasst:

    VB.NET-Quellcode

    1. Dim List As New List(Of Date)
    2. Dim tmpList = From rw In _DB_AnlagenDatenDataSet1.tblServiceDaten Group By rw.ServiceDatum Into Max(rw.ServiceDatum)
    3. For Each e In tmpList : List.Add(e.Max) : Next
    4. Dim postens = From rw In _DB_AnlagenDatenDataSet1.tblServiceDaten Where List.Contains(rw.ServiceDatum)
    5. AktuellDataGridView.DataSource = postens.AsDataView


    jedoch funktioniert es immer noch nicht ganz

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „schnibli“ ()

    Da war ich vor kurzem auch drauf, jedoch hab ich das nicht hinbekommen :s

    VB.NET-Quellcode

    1. Dim idSelector = From rw In _DB_AnlagenDatenDataSet1.tblServiceDaten Group By rw.AnlagenNr Into newest = Maxby(rw.ServiceDatum) Select ID = newest.AnlagenNr
    2. Dim ids = New HashSet(Of Integer)(idSelector)
    3. Dim filter = From rw In _DB_AnlagenDatenDataSet1.tblServiceDaten Where ids.Contains(rw.AnlagenNr)
    4. AktuellDataGridView.DataSource = filter.AsDataView


    es wird

    VB.NET-Quellcode

    1. Mayby
    und

    VB.NET-Quellcode

    1. New HashSet(Of Integer)(idSelector)
    angestrichen
    auf die definition der Mayby-methode kann in diesem kontext nicht zugegriffen werden.
    @schnibli:
    Ich habe dir ein Demo angehängt, wo mein obiger Tipp läuft - ich weis zwar nicht, wieso er bei dir nicht funktionieren will...
    EDR's Tutorial funktionert bei mir einwandfrei :) .
    Dateien

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    WoW, danke für die bemühung.... Ich werde es demnächst ausprobieren....

    Ich werde euch Dienstags Bescheid geben da ich noch in den Urlaub fahre :)

    Vielen Dank



    Edit:

    Ich konnte es nicht auf mir sitzen lassen :)

    Es funktioniert, jedoch nur Teilweise.
    Es werden nicht alle gefiltert. Zum Teil hat es AnlagenNR die immernoch Doppelt vorkommen....
    Diese Besitzen auch ein Datum ect.