sql >> Database teknologi >  >> RDS >> Sqlserver

Valg af alle datoer fra en tabel inden for et datointerval og inklusive 1 række pr. tom dato

Der er flere måder at håndtere manglende rækker på, men alle handler om at have et andet sæt data at kombinere med dine nuværende resultater.

Det kunne være afledt af dine resultater, skabt af en CTE eller anden proces (såsom dit eksempel), eller (min præference) ved at bruge en permanent skabelon at slutte sig til.

Skabelonen i dit tilfælde kunne bare være en tabel med datoer, som din @datesTBL. Forskellen er, at den er lavet på forhånd med f.eks. 100 års datoer.

Din forespørgsel kan så ligne dit eksempel, men jeg ville prøve følgende...

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

Dette sætter kalenderskabelonen til VENSTRE, og det gør mange forespørgsler nemmere, da du ved, at kalenderens datofelt altid er udfyldt, altid kun er en datoværdi (ingen tidsdel), er i orden, er enkel at GRUPPE EFTER osv.



  1. Sådan håndteres callableStatement.registerOutParameter(1, java.sql.Types.BOOLEAN);

  2. Sådan laver du en UPDATE Pass-Through Query i SQL Server

  3. Hvordan bygger man næste og tidligere links med php?

  4. Er det muligt at ændre den naturlige rækkefølge af kolonner i Postgres?