2009-12-24 102 views
0

我需要一些幫助來構建SQL查詢。我已經有喜歡的數據表:構建SQL查詢

ID Date   Value 
1 12/01/2009  4 
2 12/02/2009  3 
3 12/03/2009  6 
4 12/01/2008  2 
5 12/02/2008  4 
6 12/03/2008  5 

這裏是我的查詢:

select ID, Date, Value from MyTable 
where Date between '12/01/2009' and '12/04/2009' 

,並返回以下行:

ID Date   Value 
1 12/01/2009  4 
2 12/02/2009  3 
3 12/03/2009  6 

但我需要在以下格式的數據:

ID Date   Value lastYearValueANDSameDate 
1 12/01/2009  4    2 
2 12/02/2009  3    4 
3 12/03/2009  6    8 

這裏我需要獲取lastYearValueANDSameDate列中同一日期的最後一年的值。

感謝

+0

列出的要求並不完整,示例數據集不回答未知問題。看起來你想要的條目最低的ID加在右邊的下一個更高的ID條目。那是對的嗎? – 2009-12-24 05:58:22

+0

@NickLarson;現在檢查,我已經編輯我的問題。你現在有要求嗎? – 2009-12-24 06:02:01

+0

@Muhummad,我清理了格式並添加了(我認爲是的)你的完整查詢(總是一個好主意,包括完整的一個,因爲可能有其他的條款在那裏改變行爲)。請檢查查詢是否正確,如果不正確,請修復。 – paxdiablo 2009-12-24 06:40:09

回答

1

看一看這個

DECLARE @Table TABLE(
     ID INT, 
     Date DATETIME, 
     Value INT 
) 

INSERT INTO @Table SELECT 1, '12/01/2009', 4 
INSERT INTO @Table SELECT 2, '12/02/2009', 3 
INSERT INTO @Table SELECT 3, '12/03/2009', 6 
INSERT INTO @Table SELECT 4, '12/01/2008', 2 
INSERT INTO @Table SELECT 5, '12/02/2008', 4 
INSERT INTO @Table SELECT 6, '12/03/2008', 5 

SELECT t.ID, 
     t.Date, 
     t.Value, 
     tPrev.Value 
FROM @Table t LEFT JOIN 
     @Table tPrev ON DATEADD(yy, -1, t.Date) = tPrev.Date 
WHERE t.Date between '12/01/2009' AND '12/04/2009' 
+0

@Astander;這是格雷斯的回答,我希望這會對我有用,讓我先檢查一下。謝謝 – 2009-12-24 06:14:12

+0

@Astander,我發給你一封電子郵件,我需要一些幫助來查詢。 Plz回覆。謝謝 – 2010-04-01 14:02:53

+0

你有沒有把查詢放在SO中,我會盡快查看,當我可以儘快 - ) – 2010-04-01 17:04:10

1

未經測試,但我認爲它會工作:

select a.id, a.date, a.value, b.value 
from mytable a, mytable b 
where a.date >= '12/01/2009' 
and a.date <= '12/04/2009' 
and a.date = dateadd(year,1,b.date) 

請記住,這是一個笛卡爾乘積(雖然不是一個完整的由於最後一個and子句而交叉連接),所以它不會爲沒有相應的去年行的日期生成行。

1
DECLARE @Table TABLE(
ID INT, 
Date DATETIME, 
Value INT 
) 

INSERT INTO @Table SELECT 1, '12/01/2009', 4 
INSERT INTO @Table SELECT 2, '12/02/2009', 3 
INSERT INTO @Table SELECT 3, '12/03/2009', 6 
INSERT INTO @Table SELECT 4, '12/01/2008', 2 
INSERT INTO @Table SELECT 5, '12/02/2008', 4 
INSERT INTO @Table SELECT 6, '12/03/2008', 5 


SELECT *,(SELECT TOP 1 Value FROM @Table WHERE Date=DATEADD(YEAR,-1, a.Date)) AS last FROM @Table a 

WHERE a.Date between '12/01/2009' AND '12/04/2009'