2014-01-06 3 views
0

У меня есть ранее созданный 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%') 
      ) 
+0

Пожалуйста, правильно отформатируйте свой вопрос и уменьшите его до самой проблемы. –

+0

все эти команды udf, CASE и NOT's? Вероятно, вы должны исправить утечки (то есть исправить вашу модель данных), прежде чем пытаться заманить воду. –

+0

Scalar -значные функции, как известно, медленны в SQL Server. Это не так красиво, но использование табличных функций может значительно повысить производительность. –

ответ

0

Если я правильно понимаю, вы спрашиваете, как пройти мимо тайм-аута.

Я испытал это в прошлом и до сих пор лучшим решением, которое я придумал, является толкание данных в таблицу на основе начального вида. Затем создайте второе представление, основанное на этой таблице. Однако для этого требуется, чтобы у меня было установленное время (в некоторых случаях каждые 30 минут), что хранимая процедура сделает это для меня, и это может не сработать для вас.

Некоторые другие вещи, которые я нашел, работали, чтобы ограничить объем данных, с которыми я работал, прежде чем делать форматирование. Также убедитесь, что у вас есть правильные ключи/индексы на таблицах (таблицах), с которыми вы работаете.

+0

Это то, что я закончил делать ... Я вошел, чтобы создать процедуру, но у меня еще нет этого гвоздя. – Mebaby333