我有一张如下表格:
+-------+--------------+
| Value | Date |
+-------+--------------+
| 14 | 10/11/2010 |
| 12 | 10/12/2010 |
| 12 | 10/13/2010 |
| 10 | 10/14/2010 |
| 8 | 10/15/2010 |
| 6 | 10/16/2010 |
| 4 | 10/17/2010 |
| 2 | 10/18/2010 |
+-------+--------------+
我想计算每一行和最后一行(最新日期)之间的回报(商)。例如,对于日期为“10/16/2010”的行,结果应为6/2 = 3
因此,结果表应为
+-------+--------------+
| result| Date |
+-------+--------------+
| 7 | 10/11/2010 |
| 6 | 10/12/2010 |
| 6 | 10/13/2010 |
| 5 | 10/14/2010 |
| 4 | 10/15/2010 |
| 3 | 10/16/2010 |
| 2 | 10/17/2010 |
| 1 | 10/18/2010 |
+-------+--------------+
有可能完成吗?谢谢你!
答案 0 :(得分:0)
您可以获得想要除以的值。由于这总是一行,您可以使用交叉联接来加入并执行您的部门。
SQL Fiddle
with maxdate as
(select max([Date]) as maxdate from table1),
divby as
(select
value as divby
from
table1
inner join maxdate md
on md.maxdate = table1.[date])
select
value / divby
,[date]
from
table1
cross join divby
为了分解它,第一个CTE(巧妙地命名为maxdate)获得整个事物的最大日期。第二个CTE(divby)获取该最大日期的值(您将除以)。只要您从中获得一行,就可以安全地使用交叉连接,从而导致表中的每一行除以该值。
答案 1 :(得分:0)
表格的另一个可能的解决方案JOIN
。
select (t1b.value / t1a.value) as result,
t1b.date from table1 t1a
join table1 t1b on t1a.date = (select max(date) from table1)
答案 2 :(得分:0)
谢谢小提琴,安德鲁!如果2008年及以上(小提琴:http://sqlfiddle.com/#!3/ecda1/11):
,也可以像这样完成SELECT [Value] / MIN([Value]) OVER () AS result,
[Date]
FROM Table1