У меня есть ранее созданный SQL-представление, которое содержит данные, которые я ищу. У меня есть случай, когда есть, и это заставляет меня запутывать для запуска MAX (дата) ... Я попытался запустить представление, основанное на нем, и он просто ускоряет выбор времени ... Я могу создать новое представление с данными I нужно, но я все еще нужен данные манипуляции и должны оставить в некоторых из них случая, когда в ...SQL View MAX (date) craziness
Эта точка зрения в настоящее время производит эту информацию
THDATE ComponentItemNumber Issued Quantity
12/23/2013 12:00:00 AM TTMS-12.7-9 19
12/23/2013 12:00:00 AM TTMS-4.8-9 8.34
12/23/2013 12:00:00 AM TTMS-4.8-9 10.66
12/23/2013 12:00:00 AM 44476-3112 2
12/23/2013 12:00:00 AM M80-0130005 NULL
то, что я хочу сделать, это просто получить дату Max для каждого item # вот текущий вид ... Может ли кто-нибудь помочь мне создать SQL-заявление, которое делает это? Пожалуйста ... Я использую SQL 2000
SELECT THDATE
, CASE WHEN dbo.udf_GetHistoryChar(THBODY + THBODY2 + THBODY3 + THBODY4,
7) = 'C' THEN NULL
ELSE dbo.udf_GetHistoryVarchar(THBODY + THBODY2 + THBODY3
+ THBODY4, 10)
END AS ComponentItemNumber
, CASE WHEN dbo.udf_GetHistoryChar(THBODY + THBODY2 + THBODY3 + THBODY4,
3) = 'C' THEN NULL
WHEN dbo.udf_GetHistoryChar(THBODY + THBODY2 + THBODY3 + THBODY4,
2) = 'D' THEN NULL
ELSE dbo.udf_GetHistoryFloat(THBODY + THBODY2 + THBODY3 + THBODY4,
17)
END AS IssuedQuantity
FROM dbo.Mfg_TRANHIS AS T1
WHERE (THTRID = 'PICK')
AND (THFLAG = '1')
AND (dbo.udf_GetHistoryChar(THBODY + THBODY2 + THBODY3 + THBODY4, 1) = 'C')
AND (NOT ((CASE WHEN dbo.udf_GetHistoryChar(THBODY + THBODY2
+ THBODY3 + THBODY4, 7) = 'C'
THEN NULL
ELSE dbo.udf_GetHistoryVarchar(THBODY + THBODY2
+ THBODY3 + THBODY4,
10)
END) LIKE 'CU%')
)
AND (NOT ((CASE WHEN dbo.udf_GetHistoryChar(THBODY + THBODY2
+ THBODY3 + THBODY4, 2) LIKE '[MP]'
THEN dbo.udf_GetHistoryVarchar(THBODY + THBODY2
+ THBODY3 + THBODY4,
4)
WHEN dbo.udf_GetHistoryChar(THBODY + THBODY2
+ THBODY3 + THBODY4, 3) = 'C'
THEN dbo.udf_GetHistoryVarchar(THBODY + THBODY2
+ THBODY3 + THBODY4,
5)
WHEN dbo.udf_GetHistoryChar(THBODY + THBODY2
+ THBODY3 + THBODY4, 2) = 'D'
THEN dbo.udf_GetHistoryVarchar(THBODY + THBODY2
+ THBODY3 + THBODY4,
5)
WHEN dbo.udf_GetHistoryChar(THBODY + THBODY2
+ THBODY3 + THBODY4, 7) = 'C'
THEN dbo.udf_GetHistoryVarchar(THBODY + THBODY2
+ THBODY3 + THBODY4,
4)
ELSE dbo.udf_GetHistoryVarchar(THBODY + THBODY2
+ THBODY3 + THBODY4,
4)
END) LIKE 'VM%')
)
Пожалуйста, правильно отформатируйте свой вопрос и уменьшите его до самой проблемы. –
все эти команды udf, CASE и NOT's? Вероятно, вы должны исправить утечки (то есть исправить вашу модель данных), прежде чем пытаться заманить воду. –
Scalar -значные функции, как известно, медленны в SQL Server. Это не так красиво, но использование табличных функций может значительно повысить производительность. –