我有下面表下面的列比较数据 -SQL - 从同一个表
ID-1,ID-2和ID-3 - 键列
率 - 显示一个产品的速率基于上述ID
日期 - 暗示该费率适用的日期。
+-------+----------+-------------+----------+------------+ | ID-1 | ID-2 | ID-3 | Rate | Date | +-------+----------+-------------+----------+------------+ | 2000 | 1 | 100 | 50 | 12/30/2013 | +-------+----------+-------------+----------+------------+ | 2000 | 1 | 100 | 75 | 10/11/2013 | +-------+----------+-------------+----------+------------+ | 2000 | 1 | 100 | 100 | 12/15/2013 | +-------+----------+-------------+----------+------------+ | 2000 | 2 | 100 | 50 | 10/30/2013 | +-------+----------+-------------+----------+------------+ | 2000 | 2 | 100 | 75 | 10/11/2013 | +-------+----------+-------------+----------+------------+ | 2000 | 2 | 100 | 100 | 09/15/2013 | +-------+----------+-------------+----------+------------+ | 3000 | 2 | 200 | 25 | 1/1/2014 | +-------+----------+-------------+----------+------------+ | 4000 | 2 | 100 | 100 | 12/1/2013 | +-------+----------+-------------+----------+------------+ | 4000 | 1 | 200 | 75 | 1/1/2014 | +-------+----------+-------------+----------+------------+ | 4000 | 2 | 100 | 25 | 11/1/2014 | +-------+----------+-------------+----------+------------+
对于ID-1,每个组合ID-2和ID-3欲OUPUT以下列格式2分最近最率 - 先前速率 - 是用于第二最近的日期 电流的速率价格 - 是最近的最新日期的价格
+-------+----------+-------------+---------------+----------------+ | ID-1 | ID-2 | ID-3 | Previous Rate | Current Rate | +-------+----------+-------------+---------------+----------------+ | 2000 | 1 | 100 | 100 | 50 | +-------+----------+-------------+---------------+----------------+ | 2000 | 2 | 100 | 75 | 50 | +-------+----------+-------------+---------------+----------------+ | 3000 | 2 | 200 | | 25 | +-------+----------+-------------+---------------+----------------+ | 4000 | 1 | 200 | | 75 | +-------+----------+-------------+---------------+----------------+ | 4000 | 2 | 200 | 25 | 100 | +-------+----------+-------------+---------------+----------------+
任何想法?
MT0 - 为什么我们在select中做了max()? – jagamot
“排名”子查询将根据降序日期排序顺序为“ID-1”,“ID-2”和“ID-3”分区中的每一行分配奥运排名;但是,这不会将分区中的行分组。为了确保返回单个值,您需要对这些行进行分组,这需要一个聚合函数 - 即“MAX”);由于前面的行排序来分配排名,那么'MIN'或'AVG'的效果会一样好,但我随意选择了'MAX'。 – MT0