Tsql 分组中的第1行和第7行

Tsql 分组中的第1行和第7行,tsql,Tsql,我有一个名为Samples的表。日期列值只是符号日期值 +----+------------+-------+------+ | Id | Product_Id | Price | Date | +----+------------+-------+------+ | 1 | 1 | 100 | 1 | | 2 | 2 | 100 | 2 | | 3 | 3 | 100 | 3 | | 4 |

我有一个名为Samples的表。日期列值只是符号日期值

+----+------------+-------+------+
| Id | Product_Id | Price | Date |
+----+------------+-------+------+
|  1 |          1 |   100 |    1 |
|  2 |          2 |   100 |    2 |
|  3 |          3 |   100 |    3 |
|  4 |          1 |   100 |    4 |
|  5 |          2 |   100 |    5 |
|  6 |          3 |   100 |    6 |
...
+----+------------+-------+------+
我想按产品id分组,这样我就可以按降序排列第1个样本,并在每个产品组中添加一个新的列,其中包含第7个样本行的价格。如果第7行不存在,则该值应为null

例如:

+----+------------+-------+------+----------+
| Id | Product_Id | Price | Date | 7thPrice |
+----+------------+-------+------+----------+
|  4 |          1 |   100 |    4 | 120      |
|  5 |          2 |   100 |    5 | 100      |
|  6 |          3 |   100 |    6 | NULL     |
+----+------------+-------+------+----------+
我相信我可以在没有“第7个价格”的情况下,通过以下几点获得该表

SELECT * FROM (
    SELECT ROW_NUMBER() OVER (PARTITION BY Product_Id ORDER BY date DESC) r, * FROM Samples
) T WHERE T.r = 1

有什么建议吗?

你可以试试这样的。我使用您的查询创建了一个CTE。然后加入rank1到rank7

 ;with sampleCTE 
   as 
  (SELECT ROW_NUMBER() OVER (PARTITION BY Product_Id ORDER BY date DESC) r, * FROM Samples)

select * 
from
  (select * from samplecte where r = 1) a
left join
  (select * from samplecte where r=7) b
on a.product_id = b.product_id