Announcement

Collapse
No announcement yet.

Termine der letzten Woche

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Termine der letzten Woche

    Hallo

    Ich habe eine Tabelle, in der alle Termine eingetragen werden. In dieser existieren unteranderem zwei Spalten (StartDATE und EndDATE) vom typ int. Also steht nich das effektive datum drin, sondern der Wert entsprechend dem 01.01.1900 = 0
    Weiss grad nicht mehr wie man dem genau sagt.

    Ich möchte jetzt alle Termine erhalten, welche mindestens ein Datum der letzten sieben Tage zwischen oder gleich dem StartDATE und EndDATE sind.

    Nehmen wir an, heute ist der 08. Juni (40337) und das sind meine eingetragenen Termine:

    --------------------StartDATE------------------EndDATE
    Termin 1---------40179---(01.01.2010)-----------40543---(31.12.2010)
    Termin 2---------40179---(01.01.2010)-----------40333---(04.06.2010)
    Termin 3---------40334---(05.06.2010)-----------40543---(31.12.2010)
    Termin 4---------40331---(02.06.2010)-----------40335---(06.06.2010)
    Termin 5---------40179---(01.01.2010)-----------40209---(31.01.2010)
    Termin 6---------40360---(01.07.2010)-----------40390---(31.07.2010)


    Erscheinen sollten mir jetzt die Termine 1 - 4, da die Daten der letzten Woche den Werten 40330, 40331, 40332, 40333, 40334, 40335 und 40336 entsprechen und mindestens eine dieser Zahlen jeweils zwischen dem StartDATE und EndDATE liegt.

    Ich habe schon versucht meine Abfrage zum erhalten aller Termine vom letzten Arbeitstag abzuändern. Jedoch ohne Erfolg. Oder zumindest sehe ich die Lösung nicht.

    select *
    from activity as a
    where convert(int, a.startdate) <= (select cast(getdate() as int)) - (select 'Wochentag' =
    case
    when datename(dw, getdate()) = 'Monday' then 3
    when datename(dw, getdate()) = 'Tuesday' then 1
    when datename(dw, getdate()) = 'Wednesday' then 1
    when datename(dw, getdate()) = 'Thursday' then 1
    when datename(dw, getdate()) = 'Friday' then 1
    when datename(dw, getdate()) = 'Saturday' then 1
    when datename(dw, getdate()) = 'Sunday' then 2
    else 1
    end)

    and convert(int, a.enddate) >= cast (getdate() as int) - (select 'Wochentag' =
    case
    when datename(dw, getdate()) = 'Monday' then 3
    when datename(dw, getdate()) = 'Tuesday' then 1
    when datename(dw, getdate()) = 'Wednesday' then 1
    when datename(dw, getdate()) = 'Thursday' then 1
    when datename(dw, getdate()) = 'Friday' then 1
    when datename(dw, getdate()) = 'Saturday' then 1
    when datename(dw, getdate()) = 'Sunday' then 2
    else 1
    end)

  • #2
    Da es sich wohl um MS-SQL handelt...
    [HIGHLIGHT="SQL"]WITH activity AS
    ( SELECT 1 AS ID, 40177 AS StartDATE, 40541 AS EndDATE UNION ALL
    SELECT 2 AS ID, 40179 AS StartDATE, 40333 AS EndDATE UNION ALL
    SELECT 3 AS ID, 40334 AS StartDATE, 40543 AS EndDATE UNION ALL
    SELECT 4 AS ID, 40331 AS StartDATE, 40335 AS EndDATE UNION ALL
    SELECT 5 AS ID, 40179 AS StartDATE, 40209 AS EndDATE UNION ALL
    SELECT 6 AS ID, 40360 AS StartDATE, 40390 AS EndDate
    )

    SELECT ID
    , CONVERT (INT, GETDATE ()) AS TodayInt
    , CONVERT (NCHAR(10), DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0), 120) AS Today
    , StartDate
    , CONVERT (NCHAR(10), CONVERT (DATETIME, A.StartDATE), 120 ) AS StartDate
    , EndDate
    , CONVERT (NCHAR(10), CONVERT (DATETIME, A.EndDATE), 120) AS EndtDate
    FROm activity AS A
    WHERE StartDATE <= CONVERT (INT, GETDATE()) - CASE WHEN DATEPART (dw, GETDATE()) < 6
    THEN 7
    ELSE 0
    END
    OR EndDATE <= CONVERT (INT, GETDATE()) - CASE WHEN DATEPART (dw, GETDATE()) < 6
    THEN 7
    ELSE 0
    END
    ;
    --ID TodayInt Today StartDate StartDate EndDate EndtDate
    ------------- ----------- ---------- ----------- ---------- ----------- ----------
    --1 40330 2010-06-02 40177 2010-01-01 40541 2010-12-31
    --2 40330 2010-06-02 40179 2010-01-03 40333 2010-06-06
    --5 40330 2010-06-02 40179 2010-01-03 40209 2010-02-02[/HIGHLIGHT]

    a) Sql formartiert man so: http://entwickler-forum.de/showthread.php?t=42101
    b) und was ist, wenn die lanugage <> Englisch...
    datename(dw, getdate()) = 'Monday'

    Comment


    • #3
      Hallo ebis

      Vielen Dank für deine rasche Antwort und den Hinweis auf die Vormatierung.

      Die Sprache wird kein Problem sein, da die immer Englisch bleiben wird. Ist Firmenstandard.

      Soweit so gut. So eine ähnliche Idee hatte ich auch schon. Nur trifft es die mit dem "or" leider nicht so ganz. Schau mal deine ID 5 an. Dieser Termin lieg schon über 4 Monate zurück.
      Ich möchte aber nur diese, welche in den letzten sieben Tagen aktiv waren. Hatte ich vileicht etwas zu kompliziert erklährt. Also auf das heutige Datum bezogen währen das ID 1 und 2.

      Comment

      Working...
      X