我有一个表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
我怎样才能让它发挥作用?
答案 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()
至少类似的东西。