我需要一些帮助来构建SQL Query。我的表有如下数据:
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 :(得分: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'
答案 1 :(得分: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
子句而不是完整的交叉连接),因此它不会为没有相应的去年行的日期生成行。 / p>
答案 2 :(得分: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'