sql >> Databáze >  >> RDS >> Sqlserver

Výběr všech dat z tabulky v rámci časového období a včetně 1 řádku na prázdné datum

Existuje několik způsobů, jak se vypořádat s chybějícími řádky, ale všechny jsou o tom, že máte další sadu dat, která se spojí s vašimi aktuálními výsledky.

To by mohlo být odvozeno z vašich výsledků, vytvořených CTE nebo jiným procesem (jako je váš příklad), nebo (má preference) pomocí trvalé šablony připojit se proti.

Šablona ve vašem případě může být pouze tabulka dat, například vaše @datesTBL. Rozdíl je v tom, že je vytvořen předem, například s daty v hodnotě 100 let.

Váš dotaz pak může být podobný vašemu příkladu, ale zkusil bych následující...

SELECT 
    dt.tempDate ,
    InstructorID,           EventStart, 
    EventEnd,               cancelled, 
    cancelledInstructor, 
    EventType,              DevName, 
    Room,                   SimLocation, 
    ClassLocation,          Event, 
    Duration,               TrainingDesc, 
    Crew,                   Notes, 
    LastAmended,            InstLastAmended, 
    ChangeAcknowledged,     Type, 
    OtherType,              OtherTypeDesc, 
    CourseType 
FROM 
  @datesTBL dt 
LEFT OUTER JOIN
  OpsInstructorEventsView iv
    ON  iv.EventStart >= dt.tempDate
    AND iv.EventStart <  dt.tempDate + 1
    AND iv.InstructorID = @InstructorID 
WHERE
      dt.tempDate >= @StartDate
  AND dt.tempDate <= @EndDate
ORDER BY
  dt.tempDate,
  iv.EventStart

Tím se vloží šablona kalendáře VLEVO, a tak usnadňuje mnoho dotazů, protože víte, že pole data kalendáře je vždy vyplněno, je vždy pouze datem (bez časové části), je v pořádku, lze jej jednoduše GROUP BY atd.



  1. CREATE TYPE na MySQL

  2. OpenShift webapps připojení java mysql

  3. jak uložit PostgreSQL jsonb pomocí SpringBoot + JPA?

  4. Lze PostGIS použít k vytvoření mřížkové mapy země?