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