2013-05-03 65 views
0

我有兩個意見。一種觀點向我展示了客戶合同的到期日期。另一個是返回客戶合同的所有開始日期。我無法找出過期合同的續約金額。規則是,客戶必須在合同到期後的90天內簽訂合同。SQL Statement以時間範圍獲得合同續訂金額

http://d.pr/i/bITI

假裝分析週期是2013年一月我有一個2835,15到期金額。現在我有兩個(2835,1596)合約在這個到期後的90天內開始。

我需要一個查詢得到的結果:

http://d.pr/i/3ztY

嘗試了很多的語句,但我發現沒有辦法得到這樣的結果。任何ides?

感謝

+0

對不起,剛剛閱讀,我知道了等待 – 2013-05-03 09:02:14

+0

sql server或mysql? – Edper 2013-05-03 09:22:57

+0

Microsoft SQL Server – Andi 2013-05-03 09:33:46

回答

0

下面是我試過的答案

表一:

USE [NMIIFDB_DEV] 
GO 

/****** Object: Table [dbo].[tes1] Script Date: 5/3/2013 4:20:35 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[tes1](
    [ContractEndDate] [date] NULL, 
    [CustomerNo] [nvarchar](50) NULL, 
    [ContractAmount] [numeric](18, 2) NULL 
) ON [PRIMARY] 

GO 

表2

USE [NMIIFDB_DEV] 
GO 

/****** Object: Table [dbo].[tes2] Script Date: 5/3/2013 4:20:46 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[tes2](
    [ContractStartDate] [date] NULL, 
    [CustomerNo] [nvarchar](50) NULL, 
    [ContractAmount] [numeric](18, 2) NULL 
) ON [PRIMARY] 

GO 

SELECT語句

select YEAR(T1.ContractEndDate) AS ExpirationYear, MONTH(T1.ContractEndDate) as ExpirationMonth, 

T1.ContractAmount AS ExpirationAmount, SUM(T2.ContractAmount) AS RenewalAmount 
from tes1 T1, tes2 T2 

where MONTH(T1.ContractEndDate) = 01 AND YEAR(T1.ContractEndDate) = 2013 AND MONTH(T2.ContractStartDate) = 01 AND YEAR(T2.ContractStartDate) = 2013 

GROUP BY YEAR(T1.ContractEndDate), MONTH(T1.ContractEndDate), 
T1.ContractAmount 

你可以在括號中聲明你想要比較的參數

+0

謝謝。 更改WHERE子句 'WHERE MONTH(T1.ContractEndDate)= 01 和年份(T1.ContractEndDate)= 2013 AND DATEDIFF(DAY,T1.ContractEndDate,T2.ContractStartDate)> = 0 AND DATEDIFF(DAY, T1.ContractEndDate,T2.ContractStartDate)<= 90 AND T1.CustomerNo = T2.CustomerNo ' 我會用更多的數據對它進行測試 – Andi 2013-05-03 09:39:07

+0

另一個問題是,如果我在一個月內有超過一個客戶的到期時間。我想我應該使用MAX(ContractEndDate)來查看哪些合約可以作爲續訂值。 – Andi 2013-05-03 09:47:33

+0

這是真的,但每個客戶的到期合同應該有一個有效的合同,所以我的意思是它取決於您的必要和業務角色,接受它,如果你喜歡答案hehe綠色接受按鈕來接受這個答案 – 2013-05-03 10:11:51