2012-12-06 19 views
0

我有一個數據集,顯示關聯工作日的貨幣即期匯率,並希望爲每個貨幣的參考日期提前計算10個最新數據點的值。如何在DATEADD()函數中引用2周 - 1天?

數據如下所示:

AsOfDate Currency ExchangeRateUSD 
9/11/1997 AED -1 
9/11/1997 AUD 1.389178 
9/11/1997 CAD 1.39125 
9/11/1997 CHF 1.4774 
9/11/1997 CZK 33.6755 
9/11/1997 DKK 6.8203 
9/11/1997 HKD 7.7455 
9/11/1997 IDR 2943 
9/11/1997 JPY 119.77 
9/11/1997 KWD -1 
9/11/1997 MXN 7.7855 
9/11/1997 NOK 7.36715 
9/11/1997 NZD 1.579654 
9/11/1997 PHP 32.53 
9/11/1997 SEK 7.7944 
9/11/1997 SGD 1.511 
9/11/1997 THB 35.475 
9/11/1997 TWD 28.6125 
9/11/1997 ZAR 4.698 
9/12/1997 AED -1 
9/12/1997 AUD 1.386001 
9/12/1997 CAD 1.39325 
9/12/1997 CHF 1.46475 
9/12/1997 CZK 33.449 
9/12/1997 DKK 6.7377 
9/12/1997 HKD 7.746 
9/12/1997 IDR 2933 
9/12/1997 JPY 120.815 
9/12/1997 KWD -1 
9/12/1997 MXN 7.7765 
9/12/1997 NOK 7.2844 
9/12/1997 NZD 1.575175 
9/12/1997 PHP 32.2 
9/12/1997 SEK 7.65845 
9/12/1997 SGD 1.514 
9/12/1997 THB 36.225 
9/12/1997 TWD 28.613 
9/12/1997 ZAR 4.6865 
9/15/1997 AED -1 
9/15/1997 AUD 1.387829 
9/15/1997 CAD 1.39185 
9/15/1997 CHF 1.45175 

隨着1999年2月19日的基準日期,我想返回下面的數據(例如僅顯示了兩種貨幣,實際返回的數據將包括所有的貨幣):

AsOfDate Currency ExchangeRateUSD 
2/8/1999 EUR 0.888968 
2/9/1999 EUR 0.884956 
2/10/1999 EUR 0.883275 
2/11/1999 EUR 0.885152 
2/12/1999 EUR 0.886682 
2/15/1999 EUR 0.889957 
2/16/1999 EUR 0.894454 
2/17/1999 EUR 0.890234 
2/18/1999 EUR 0.891107 
2/19/1999 EUR 0.901266 
2/8/1999 JPY 113.71 
2/9/1999 JPY 114.38 
2/10/1999 JPY 114.52 
2/11/1999 JPY 114.3 
2/12/1999 JPY 114.305 
2/15/1999 JPY 115.525 
2/16/1999 JPY 118.175 
2/17/1999 JPY 118.895 
2/18/1999 JPY 119.82 
2/19/1999 JPY 120.53 

對於1999年2月25日的基準日期,我想再次返回以下數據(實際數據將顯示所有貨幣):

AsOfDate Currency ExchangeRateUSD 
2/12/1999 EUR 0.886682 
2/15/1999 EUR 0.889957 
2/16/1999 EUR 0.894454 
2/17/1999 EUR 0.890234 
2/18/1999 EUR 0.891107 
2/19/1999 EUR 0.901266 
2/22/1999 EUR 0.906454 
2/23/1999 EUR 0.910705 
2/24/1999 EUR 0.91295 
2/25/1999 EUR 0.904895 
2/12/1999 JPY 114.305 
2/15/1999 JPY 115.525 
2/16/1999 JPY 118.175 
2/17/1999 JPY 118.895 
2/18/1999 JPY 119.82 
2/19/1999 JPY 120.53 
2/22/1999 JPY 120.33 
2/23/1999 JPY 121.195 
2/24/1999 JPY 121.88 
2/25/1999 JPY 120.1 

正如您所看到的,開始日期和結束日期之間的天數將根據參考日期而有所不同,因此我無法在DATEADD()內使用DATEPART日。儘管如此,使用化合物2周到1天會使我獲得適當的範圍。

有沒有辦法在DATEADD()或其他方式使用複合DATEPART?

編輯 - 我錯過了一個關鍵點...我想這樣做多個貨幣與多個參考日期同時。我有一個引用日期表(#referenceDates),我將加入匯率表(#exchangeRates),並且我想在WHERE子句中使用BETWEEN來爲每個引用日期提取適當的日期,因此在DATEADD()中需要複合DATEPART。

+0

您試圖獲得給定日期的10條最近記錄? – Justin

回答

1

對於2/25/1999

SELECT TOP(10) * 
    FROM DATA 
WHERE Currency = 'JPY' 
    AND AsOfDate <= '19990225' 
ORDER BY AsOfDate DESC; 

對於基準的基準日期,如果你真的想2個星期 - 每日1次,天真的表情:

DATEADD(D, +1, DATEADD(WK, -2, '19990225')) 

但你最好去與13日直接

DATEADD(D, -13, '19990225') 

或者在查詢(但它不會給你10個數據點,如果你在你的數據在天空白):

SELECT * 
    FROM DATA 
WHERE Currency = 'JPY' 
    AND AsOfDate <= '19990225' 
    AND AsOfDate >= DATEADD(D, -13, '19990225') 
ORDER BY AsOfDate ASC; 
+0

不錯,DATEADD(dd,1,DATEADD(wk,-2,@ referenceDate))會這樣做。謝謝。 – Chris

0

看起來你可以逃脫:

select top 10 * 
from YourTable 
where AsOfDate <= @refDate 
order by AsOfDate desc 
0

查詢:

SQLFIDDLEExample

SELECT 
a.* 
FROM(
SELECT TOP 10 
t1.* 
FROM tbl t1 
WHERE t1.AsOfDate <='2/25/1999' 
ORDER BY t1.AsOfDate DESC 
)a 
ORDER BY a.AsOfDate ASC 

結果爲1999年2月25日:

|      ASOFDATE | CURRENCY | EXCHANGERATEUSD | 
---------------------------------------------------------------- 
| February, 12 1999 00:00:00+0000 |  JPY |   114.305 | 
| February, 15 1999 00:00:00+0000 |  JPY |   115.525 | 
| February, 16 1999 00:00:00+0000 |  JPY |   118.175 | 
| February, 17 1999 00:00:00+0000 |  JPY |   118.895 | 
| February, 18 1999 00:00:00+0000 |  JPY |   119.82 | 
| February, 19 1999 00:00:00+0000 |  JPY |   120.53 | 
| February, 22 1999 00:00:00+0000 |  JPY |   120.33 | 
| February, 23 1999 00:00:00+0000 |  JPY |   121.195 | 
| February, 24 1999 00:00:00+0000 |  JPY |   121.88 | 
| February, 25 1999 00:00:00+0000 |  JPY |   120.1 | 
相關問題