SQL View MAX(日期)疯狂

时间:2014-01-06 17:16:10

标签: sql-server sql-server-2000

我有一个先前创建的SQL视图,其中包含我想要获取的数据。它有Case的时候,它让我混淆运行MAX(日期)...我试图运行一个基于它的视图,它只是保持超时...我可以用数据创建一个新的视图我需要,但我仍然需要操纵数据,并且必须留下一些这样的情况......

此视图目前产生此信息

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

我想要做的只是获取每个项目的最大日期# 这是当前视图...有人可以帮我创建一个执行此操作的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%' )
            )

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你会问如何超越Timeout问题。

我过去经历过这种情况,到目前为止我提出的最佳解决方案是根据起始视图将数据推送到表中。然后基于该表创建第二个视图。但是,这要求我有一个设定的时间(在某些情况下每30分钟一次),存储过程会为我做这个,这可能对你不起作用。

我发现的其他一些工作是在进行格式化之前限制我使用的数据量。还要确保您正在使用的表上有正确的键/索引。