2011-10-01 81 views
0

這是代碼:問題在T-SQL代碼MAX聲明

Select BCPP.* 
from ViewPBCPP BCPP 
inner join 
( 
Select MBC.PC  PC 
     ,MRT.Name CT 
     ,Max(dbo.CalcDatefromUTC(MBC.CreatedDate)) as LRDate 
from TableBACC MBC 

inner join TableSC.RT MRT 
ON MBC.RTid = MRT.id 
where MBC.Isdeleted = 'False' 
and MBC.PC <> 'NULL' 
Group by MBC.PC 
     ,MRT.Name 
) MBCR 
ON BCPP.P_id = MBCR.PC 
and BCPP.CreatedDate = MBCR.LRDate 
and BCPP.CT = MBCR.CT 

現在Max(dbo.CalcDatefromUTC(MBC.CreatedDate))實際上是一個功能上面

查詢工作正常Max(dbo.CalcDatefromUTC(MBC.CreatedDate))

現在,當我寫

Max(dbo.CalcDatefromUTC(MBC.CreatedDate)) + Min(dbo.CalcDatefromUTC(MBC.CreatedDate)) 

我無法從此查詢中獲取任何值10以上

如果我寫的只是

(dbo.CalcDatefromUTC(MBC.CreatedDate)) 

它給我的錯誤,它不包含聚合函數或函數組

其實我是想這

(dbo.CalcDatefromUTC(MBC.CreatedDate)) 

使我可以使用這個函數的所有值,而不僅僅是它的最大值

如何更改此代碼以實現我的目標?

任何??

+0

你的意思是使用'dbo.CalcDatefromUTC(MAX(MBC.CreatedDate))'? –

+0

我不想使用MAX,因爲MAX只會給我提供函數中日期的最新值。我想改變這個,這樣我就可以使用這個函數計算的所有日期值,而不僅僅是最新或最大日期值。如果我刪除最大的代碼被寫入的方式我得到聚合函數或按功能錯誤分組 – user680865

+0

那麼爲什麼你使用'GROUP BY MBC.PC,MRT.Name'? –

回答

0

SELECT列表中不能有dbo.CalcDatefromUTC(MBC.CreatedDate),因爲它們都不是MBC.CreatedDate,因爲它不在GROUP BY列表中。

雖然您可以有MAX(MBC.CreatedDate),但是因爲它在該列上使用了聚合函數(MAX)。您還可以:

dbo.CalcDatefromUTC(MAX(MBC.CreatedDate)) as LRDate 

這實際上是相同的(雖然也許有點快),如:

MAX(dbo.CalcDatefromUTC(MBC.CreatedDate)) as LRDate 

從您的意見,我認爲上面是不是非常有幫助。通過MBC.CreatedDate也許分組及是你想要什麼:

Select BCPP.* 
from ViewPBCPP BCPP 
inner join 
( 
Select MBC.PC  PC 
     ,MRT.Name CT 
     ,dbo.CalcDatefromUTC(MBC.CreatedDate) as LRDate 
from TableBACC MBC 

inner join TableSC.RT MRT 
ON MBC.RTid = MRT.id 
where MBC.Isdeleted = 'False' 
and MBC.PC <> 'NULL' 
Group by MBC.PC 
     ,MBC.CreatedDate     --- added 
     ,MRT.Name 
) MBCR 
ON BCPP.P_id = MBCR.PC 
and BCPP.CreatedDate = MBCR.LRDate 
and BCPP.CT = MBCR.CT 
+0

這意味着你在子查詢結果集中有更多的行,每個不同的'(MBC.PC,MBC.CreatedDate,MRT.Name)'組合有一行。所以,是的,在分組過程中不會有「MBC.CreatedDate」會「丟失」。完全不知道這是不是你想要的。試試看。 –

+0

如果您告訴我們這個'dbo.CalcDatefromUTC()'函數做了什麼,我們可能會知道查詢的功能。 –

+0

dbo.CalcDatefromUTC()函數將VDate計算爲startVDate和endVDate之間的日期時間。它返回DateTime – user680865