J'ai le SQL suivant qui obtient une saison pour chaque jour dans une plage de dates, puis groupes chaque saison par date de début et de fin avec le nombre de nuits. Ce qu'il fait n'est pas important mais ma question est de savoir quelle est la meilleure, la façon dont je l'ai fait ci-dessous ou utiliser la première instruction select comme sous-requête chaque fois que @dateSeasons est utilisé dans la deuxième requête. Les deux façons semblent fonctionner de la même manière, mais cette façon semble plus propre.Joints multiples sur une table temporaire OU sous-requête dans SQL 2008
DECLARE @dateSeasons TABLE ([date] date, seasonID int)
INSERT INTO @dateSeasons
SELECT D.[date], S.ID
FROM @dates AS D
CROSS APPLY (
SELECT TOP 1 ID
FROM dbo.Seasons
WHERE bookingID = @bookingID
AND D.[date] BETWEEN startDate AND endDate
ORDER BY ID DESC
) AS S
SELECT MIN([date]), endDate, DATEDIFF(DAY, MIN([date]), DATEADD(DAY, 1, endDate)), seasonID
FROM (
SELECT S1.seasonID, S1.[date], (
SELECT MAX([date])
FROM @dateSeasons S2
WHERE S2.seasonID = S1.seasonID
AND NOT EXISTS (
SELECT NULL
FROM @dateSeasons S3
WHERE S3.[date] < S2.[date]
AND S3.[date] > S1.[date]
AND S3.seasonID <> S1.seasonID
)
) AS endDate
FROM @dateSeasons S1
) AS results
GROUP BY endDate, seasonID
ORDER BY MIN([date])
« Ce qu'il fait est pas important » - Je pense que vous allez est! Souvent, les gens vous diront leur solution perçue à un problème plutôt que le problème réel qu'ils tentent de résoudre. –
Oui, c'est évidemment important pour moi, mais ce n'est pas important pour la question que je pose. – markvpc
Ce qui est le mieux dépend fortement du SGBDR, des structures de table, des index et de la distribution de taille de vos données. Aucun d'entre eux n'est spécifié dans votre question. La meilleure façon de déterminer laquelle de deux requêtes est la meilleure est généralement de les tester les unes par rapport aux autres tout en observant les statistiques de requête et les plans de requête que votre SGBDR met à votre disposition. En ce qui concerne le commentaire de Mitch et votre réponse, il est généralement important parce que la réponse à ce qui est le mieux sera souvent «aucun de ce qui précède». –