Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Datumsabfrage

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von jBourne242, 11 März 2014.

  1. jBourne242

    jBourne242 Neuer Benutzer

    Hallo Miteinander,

    ich habe eine Datenbank mit Aufträgen. Zu jedem Auftrag gibt es ein Wareneingangsdatum und ein Lieferscheindatum. Die Zeitspanne dazwischen ist somit der Verbleib im Unternehmen. Außerdem enthält jeder Auftrag eine Gewichtsangabe.

    Nun möchte ich in einem bestimmten Datumsbereich den Warenbestand (Summe der Gewichte) für jeden Tag innerhalb dieses Datumsbereichs anzeigen. Mein Problem ist, dass ein Datensatz ja bei mehreren Tagen vorhanden sein muss.

    Beispiel:
    Wareneingang: 01.01.2014
    Lieferschein: 07.01.2014

    Wenn ich nun eine Abfrage für Januar 2014 mache, muss das Gewicht dieses Auftrags für jeden Tag zwischen dem 01.01. und 07.01.2014 in das Summenergebnis mit einfließen.

    Kann mir jemand hier einen Denkanstoß geben, wie ich diese Abfrage realisiere. Ergebnis sollte wie folgt aussehen:

    01.01.2014: 720 kg
    02.01.2014: 834 kg
    03.01.2014: 420 kg
    ...

    Gruß
    jBourne
     
  2. Hony%

    Hony% Datenbank-Guru

    Hier mal ein Denkansatz:
    Code:
    WITH RECURSIVE Kalender (Tag)
    AS (
    SELECT '2014-01-01'::date AS Tag
    UNION ALL
    SELECT Tag + 1
    FROM Kalender
    WHERE Tag < '2014-01-07'::date
    )
    SELECT Tag, SUM(Gewicht) FROM Kalender
    INNER JOIN jbourne
    ON eingang <= Tag
    AND schein >= Tag
    GROUP BY Tag
    ORDER BY Tag
    Getestet in PostgreSQL. Sollte sich aber für MS-SQL umformen lassen.

    Gruß
    Hony
     
  3. ukulele

    ukulele Datenbank-Guru

    Das kann man auch wunderbar mit BETWEEN lösen. Das schwierige ist eigentlich erstmal eine Liste aller Tage zu erzeugen wie Hony% das auch schon getan hat. Hier mal die MSSQL Version:
    Code:
    WITH    Kalender AS (
    SELECT    cast('20130101' AS DATETIME) AS Tag
    UNION ALL
    SELECT    dateadd(dd,1,Tag)
    FROM    Kalender
    WHERE    dateadd(dd,1,Tag) <= '20130630'
    )
    SELECT    convert(VARCHAR(10),k.Tag,104) AS Datum
    FROM    Kalender k
    ORDER BY k.Tag
    OPTION    (MAXRECURSION 0);
    http://social.technet.microsoft.com...aff35cc9c/datumliste-erzeugen?forum=sqlserver

    Und dann einfach das Gewicht summieren:
    Code:
    WITH    Kalender AS (
    SELECT    cast('20130101' AS DATETIME) AS Tag
    UNION ALL
    SELECT    dateadd(dd,1,Tag)
    FROM    Kalender
    WHERE    dateadd(dd,1,Tag) <= '20130630'
    )
    SELECT    convert(VARCHAR(10),k.Tag,104) AS Datum,
            sum(t.gewicht) AS Gewicht
    FROM    Kalender k
    LEFT JOIN tabelle t
    ON        k.Tag BETWEEN t.eingangsdatum AND t.lieferscheindatum
    GROUP BY k.Tag
    ORDER BY k.Tag
    OPTION    (MAXRECURSION 0);
     
  4. jBourne242

    jBourne242 Neuer Benutzer

    Vielen Dank, ihr habt mir sehr weitergeholfen!!!
     
Die Seite wird geladen...
Ähnliche Themen - Datumsabfrage
  1. Data007
    Antworten:
    3
    Aufrufe:
    1.352

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden