Abfrageproblem - Datum

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Abfrageproblem - Datum

    Hallo,

    hab ein Problem mit einer Datenabfrage.

    Habe in einer Datenbanktabelle Artikel stehen... die Tabelle schaut so aus ca.

    Quellcode

    1. ID Datum Artikel
    2. 1 01.01.2011 Rosen ROT
    3. 2 01.05.2011 Blume blau
    4. 3 01.05.2011 Blume rot
    5. 4 01.05.2011 Rosen ROT
    6. 5 12.09.2011 Blum gelb


    Erreichen möchte ich folgendes: Gebe ich als Datum den 13.09.2011 sollen vom Datum her am ältersten sind - also ID 2, 3, 4, 5

    Gebe ich als Datum z.B. 01.04.2011 an, soll nur ID 1 aufgelistet werden

    Gebe ich als Datum z.B. 01.06.2011 an, soll nur ID 2, 3, 4 kommen...

    Dies versuche ich mit diesem Code:

    VB.NET-Quellcode

    1. Dim MM As Integer = DateTimePicker1.Text.Substring(3, 2)
    2. Dim TT As Integer = DateTimePicker1.Text.Substring(0, 2)
    3. Dim JJ As Integer = DateTimePicker1.Text.Substring(6, 4)
    4. Dim Datum As String = Format(MM, "00") & "/" & Format(TT, "00") & "/" & Format(JJ, "0000")
    5. Filter = "SELECT * FROM Provisionsartikel WHERE PrA_PrDatum = " & _
    6. "(SELECT Max(PrA_PrDatum) FROM Provisionsartikel WHERE PrA_PrDatum <= #" & Datum & "#) " & _
    7. "ORDER BY PrA_Warengruppe, PrA_Bezeichnung1 ASC"


    Gebe ich bei diesem Code an 13.09.2011, kommt ledeglich nur ID 5 sonst nix.
    Es sollte aber 2, 3, 4 und 5 ausgegeben werden.

    Kann mir einer sagen, wo da der Fehler drinnen ist ????

    Gruß
    lris

    lris08 schrieb:

    ja aber was soll daran falsch sein ?

    SELECT * FROM foo WHERE datum = ....

    Alles was NACH dem "=" ist Wurst, denn es kann nur EXAKT EIN Datum sein. Also werden auch nur die Datensätze ausgewählt, die GENAU DIESES Datum haben. Fragt sich warum du eine komplizierte Sub-Abfrage verwendest, wenn das Ganze so simpel ist, wie ich oben bereits skizzierte?
    Gebe ich als Datum z.B. 01.06.2011 an, soll nur ID 2, 3, 4 kommen
    Sie möchte alle die zum Zeitpunkt des Datums aktuell waren.
    Also in dem Beispiel nicht die ID 1.
    Von daher stimmt der Ansatz von der Logik her schon

    SQL-Abfrage

    1. SELECT * FROM Provisionsartikel WHERE PrA_PrDatum = (SELECT Max(PrA_PrDatum) FROM Provisionsartikel WHERE PrA_PrDatum <= #" & Datum & "#)"

    Kann sein, dass die Datumsabfrage gequotet werden muss?
    So in etwa:
    WHERE PrA_PrDatum <= '#01/06/2011#'
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    hhmm... ok, habe mich auch vielleicht falsch ausgedrückt...

    ich versuchs nochmal :)

    also wenn ich heute (13.09.2011) angebe, soll immer der letzt gültige Artikel gefunden werden..

    Quellcode

    1. ID Datum Artikel
    2. 1 01.02.2011 Blume blau
    3. 2 01.03.2011 Blume blau
    4. 3 01.05.2011 Blume gelb


    gebe ich als Datum nun 19.03.2011 soll im DGV nur Artikel mit der ID 2 und 3 kommen, 1 soll und darf vorallem nicht angezeigt werden, da da ja noch ein alter preis drinnen steht.
    Will mich ja nicht selbst bekackern ;)

    Also sprich er soll mich alle Artikel bringen die kleiner oder gleich heute sind ABER wenn Artikel öfters vorkommen, davon immer nur denjenigen der vom Datum her der jüngste ist... also im óbrigen Beispiel: 19.03.2011 größer als 01.03.2011 und 01.02.2011 - wobei nur der ARtikel mit dem Datum 01.03.2011 angezeigt werden soll


    puh... hoffe ich konnts einigermaßen jetzt beschreiben...
    :)

    LG lris
    Also pro Artikel das neueste Datum.

    Krieg ich jetzt ohne Test mit einer Datenbank auch nicht aus dem Kopf hin.
    Vielleicht irgendwie so:

    SQL-Abfrage

    1. SELECT Tab.Artikel, Tab.Datum FROM Tab INNER JOIN
    2. (SELECT MAX(Datum) AS MaxDate, Artikel FROM Tab GROUP BY Artikel ORDER BY MaxDate DESC) AS Filter
    3. ON Filter.Artikel= Tab.Artikel
    Ohne Garantie.
    Wahrscheinlich kann das einer noch besser.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --