У меня есть таблица (Cars), в которой сохраняются некоторые характеристики автомобиля, такие как EngineNo, LastProductionStepId, NodyNo,...
Кроме того, у меня есть еще одна таблица (CarSteps), в которой сохраняются все этапы, которые должен пройти конкретный автомобиль в процессе производства, такие как назначение двигателя (Id = 2), гравировка (3), предварительная покраска (4), покраска (5), послепокраска (6). ), Подтверждение(7), Доставка(8)
Я хотел бы получить все автомобили, находящиеся между PrePaint и Confirmation на данный момент:
select cr.Id, cr.BodyNo, cr.LastStepId
from Cars cr WITH (NOLOCK)
inner join CarSteps steps WITH (NOLOCK) on cr.Id = trace.CarId and cr.LastStepId=trace.StepId
where
cr.LastStepId >= 4
AND cr.[Status] = 1
AND steps.[Status] = 1
AND not exists ( select *
from CarSteps steps1 WITH (NOLOCK)
where steps1.CarId = cr.Id
AND steps1.StepId >= 7 AND steps1.Status = 1
)
Поскольку в CarSteps много записей (44 миллиона), запрос выполняется медленно. Каково твое мнение? есть ли лучший способ получить эти автомобили?
cr.LastStepId between 4 and 7
? Нет необходимости искать вCarSteps
, если у вас есть текущийStepId
вLastStepId
. - person Mikael Eriksson   schedule 16.11.2011