编写查询以获取某个短代码的值,如今天,30天后和60天后的单个选择

时间:2014-02-24 11:44:28

标签: sql sql-server-2008

我有一个表Revenue_shares表,我需要编写一个查询来获取某个短代码的值,如今天,30天后和60天后的单个select.Tried子查询但它不起作用

select shortcode,Name,Value today_value,
       (select Value from Revenue_shares 
        where convert(date,[Date]) = (convert(date,getdate()-30)),
              (select Value from Revenue_shares where convert(date,[Date])=(convert(date,getdate()-60))
from Revenue_shares

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:1)

你有更多的开括号而不是结束。
而且您不需要子查询,这里需要JOIN 假设shortcode是唯一ID,以下内容应该有效:

SELECT r1.shortcode,
       r2.Name,
       r1.Value today_value,
       r2.Value 30daysago_value,
       r3.Value 60daysago_value,
  FROM Revenue_shares r1
       INNER JOIN Revenue_shares r2
                  ON r1.shortcode = r2.shortcode
       INNER JOIN Revenue_shares r3
                  ON r2.shortcode = r3.shortcode
 WHERE     convert(date,r1.[Date]) = (convert(date,getdate()))
       AND convert(date,r2.[Date]) = (convert(date,getdate()-30))
       AND convert(date,r3.[Date]) = (convert(date,getdate()-60))

此外,下次使用Notepad++检查括号。

答案 1 :(得分:1)

有很多方法可以解决这个问题 - 也许最简单的方法是使用连接(内部如果你确定短代码/日期记录将存在,如果不存在则留在外部)

select today.shortcode, today.value todayvalue, lastmonth.value lastmonthvalue, twomonths.value twomonthsvalue
    from revenue_shares today
    inner join revenue_shares lastmonth on lastmonth.shortcode=today.shortcode 
        and [date]=dateadd(day, -30, getdate())
    inner join revenue_shares twomonths on twomonthsshortcode=today.shortcode 
        and [date]=dateadd(day, -60, getdate())
     where today.[date]=getdate()

至少类似的东西。