sql >> Database >  >> RDS >> Sqlserver

Alle datums selecteren uit een tabel binnen een datumbereik en inclusief 1 rij per lege datum

Er zijn verschillende manieren om met ontbrekende rijen om te gaan, maar ze hebben allemaal te maken met een andere set gegevens die u kunt combineren met uw huidige resultaten.

Dat kan worden afgeleid van uw resultaten, gemaakt door een CTE of ander proces (zoals uw voorbeeld), of (mijn voorkeur) door een permanent sjabloon te gebruiken om mee te doen.

De sjabloon in uw geval kan gewoon een tabel met datums zijn, zoals uw @datesTBL. Het verschil is dat het van tevoren is gemaakt met bijvoorbeeld 100 jaar aan datums.

Uw vraag kan dan lijken op uw voorbeeld, maar ik zou het volgende proberen...

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

Dit plaatst de kalendersjabloon aan de LINKERKANT, en maakt zo veel zoekopdrachten gemakkelijker omdat u weet dat het datumveld van de kalender altijd gevuld is, altijd alleen een datumwaarde (geen tijdsdeel) is, in orde is, eenvoudig te GROUPEREN OP, enz.



  1. PostgreSQL - pg_config -bash:pg_config:opdracht niet gevonden

  2. Rails-migratie:Bigint op PostgreSQL lijkt te falen?

  3. Verbinding maken met MySQL met Microsoft .NET

  4. mysql match tegen meerdere woorden