mhd.sbt Ответов: 1

Если вы знаете SQL оптимизируйте этот скрипт


пожалуйста, не используйте Temptable из-за проблемы с производительностью ، у меня есть время с cardNo, что я хочу найти соответствующую кадровую базу на некоторую дату вступления в силу. каждый персонал может иметь несколько EffectiveDate с различными CardNo

<pre>CREATE PROCEDURE [dbo].[PersonnelDetails_GetPersonnelByCardNoAndTime]
(
@CardNo VARCHAR(16),
@Time SMALLDATETIME
)
AS
DECLARE @PersonnelBaseID INT;
DECLARE @EffectiveDate SMALLDATETIME;

SELECT EffectiveDate,PersonnelBaseID,CardNo INTO #PersonnelDetails FROM 
(
	SELECT
		personnelDetails.EffectiveDate, personnelDetails.PersonnelBaseID, CardNo 
	FROM
		dbo.tkp_PersonnelDetails AS personnelDetails 
	INNER JOIN
	(
		SELECT
				MAX(EffectiveDate) AS EffectiveDate,details.PersonnelBaseID
		FROM            
			dbo.tkp_PersonnelDetails AS details INNER JOIN
			prs_Personnel personnel ON personnel.ID = details.PersonnelBaseID AND 
			Personnel.Active = 1 AND 
			Personnel.Deleted = 0 AND
			details.Deleted = 0 AND 
			details.EffectiveDate <= @Time
		GROUP BY PersonnelBaseID
	)result ON (result.PersonnelBaseID = personnelDetails.PersonnelBaseID AND result.EffectiveDate = personnelDetails.EffectiveDate AND personnelDetails.Deleted = 0  AND CardNo = @CardNo)
)details 
WHERE 
	CardNo = @CardNo
ORDER BY details.Effectivedate DESC

SELECT TOP 1 
	@PersonnelBaseID = PersonnelBaseID ,
	@EffectiveDate = EffectiveDate,
	@CardNo = CardNo
FROM 
	#PersonnelDetails 
ORDER BY Effectivedate DESC
 IF ((SELECT COUNT(DISTINCT PersonnelBaseID) FROM #PersonnelDetails WHERE EffectiveDate = @EffectiveDate AND CardNo = @CardNo) > 1)--handle Multi Personnel With On CardNo In same EffectiveDate :(
	 SELECT 0;
 ELSE
	SELECT @PersonnelBaseID;
DROP TABLE #PersonnelDetails


Что я уже пробовал:

пожалуйста, не используйте Temptable из-за проблемы с производительностью ، у меня есть время с cardNo, что я хочу найти соответствующую кадровую базу на некоторую дату вступления в силу. каждый персонал может иметь несколько EffectiveDate с различными CardNo

PIEBALDconsult

Неужели там весь код? Похоже, что части отсутствуют. Не все скобки закрыты, и что там еще делает этот человек?
Избегайте подзапросов; попробуйте использовать вместо них общие табличные выражения.
И зачем идти на все эти неприятности только для того, чтобы получить счет?

mhd.sbt

Привет PIEBALDconsult :)
В этом бизнесе есть сумма персонала с одинаковым эффективным состоянием и одним Кардно،
Я хочу отфильтровать этот персонал ، если этот запрос сталкивается с этим условием мы должны вернуть 0 а в другом случае мы должны вернуть связанный персонал с carno :(
и этот новый скрипт работает правильно ، bu имеет низкую производительность при больших данных

PIEBALDconsult

Угу. И ответы на мои вопросы...?

mhd.sbt

какой именно?

PIEBALDconsult

Я считаю до трех.

1 Ответов

Рейтинг:
2

Thava Rajan

Надеюсь, вы попробуете аналитическая функция[^]