2014-01-06 79 views
-1

我必須創建一個查詢來返回下一個分期付款日期,並且在沒有下一個日期(例如,已經付款)的記錄​​時遇到問題,但我仍然需要返回該記錄。分期付款是每30天一次。像這樣:如何在sql where子句中包含max?

SELECT u.idloan, t.instdate 
FROM loans u, schedule t 
WHERE t.instdate IS NOT NULL 
AND (t.instdate > CONVERT(VARCHAR,getdate(),102) 
AND t.instdate < DateAdd(DAY, 30, GetDate()) 
AND t.loanid= u.idloan 
ORDER BY u.idloan 

用上面的查詢我得到貸款下一個付款日期,但沒有貸款記錄已經支付。我正在考慮加入:

or max (t.instdate) < convert(varchar,getdate(),102) 

但是,獲取錯誤不能在where子句中包含max。 任何解決辦法?在SQL Server 2012上工作。

謝謝。

+4

爲什麼對上帝的愛,你比較之前將所有您的日期VARCHAR處理? –

+1

我們可以得到樣本起始數據和預期結果嗎? –

+0

Seconding @ NielsKeurentjes的問題。自從SQL Server 2008以來,您已經可以使用CAST(x AS date)。 –

回答

0

使用HAVING條款:

HAVING max(t.instdate) < convert(varchar,getdate(),102) 
+0

考慮到所需的條件是「OR」,由於它的功能是「AND」,因此它將無法正常工作。儘管(或者來自子查詢),你必須使用'HAVING'子句來進行聚合,所以沿着這些線條有所不同。 –

+1

這是一條評論,而不是答案。 *你會如何使用HAVING子句?分組標準是什麼? –

+1

我想知道爲什麼這樣一個明顯錯誤的答案(它甚至不會運行!)得到3 upvotes ... –