Sql server 如何在SQL Server中按日期列排序组中的列
我有以下样本数据:Sql server 如何在SQL Server中按日期列排序组中的列,sql-server,tsql,Sql Server,Tsql,我有以下样本数据: car_id owner_id service_date 1 user2 2016-01-02 00:00:00 1 user2 2016-03-02 00:00:00 1 user3 2016-11-02 00:00:00 1 user4 2017-01-02 00:00:00 1 user4 2017-02-12 00:00:00 1 user1 2017-03-22
car_id owner_id service_date
1 user2 2016-01-02 00:00:00
1 user2 2016-03-02 00:00:00
1 user3 2016-11-02 00:00:00
1 user4 2017-01-02 00:00:00
1 user4 2017-02-12 00:00:00
1 user1 2017-03-22 00:00:00
1 user2 2017-03-24 00:00:00
我试图在sql server中为给定的汽车id对owner\u id列进行排名
对于给定的car_id值,如果“owner_id”值不同于前一行中的“owner_id”值,则排名列应增加1,其中行按服务日期升序排序
预期产出:
car_id owner_id service_date rnk
1 user2 2016-01-02 00:00:00 1
1 user2 2016-03-02 00:00:00 1
1 user3 2016-11-02 00:00:00 2
1 user4 2017-01-02 00:00:00 3
1 user4 2017-02-12 00:00:00 3
1 user1 2017-03-22 00:00:00 4
1 user2 2017-03-24 00:00:00 5
我试图通过划分汽车id和车主id来找到具有稠密秩函数的秩,但这会导致错误的秩
创建表tb_示例
汽车识别码,
所有者id NVARCHAR5,
服务日期时间
;
在tb_示例中插入汽车id、车主id、服务日期值1、“用户2”、“2016-01-02”;
在tb_示例中插入汽车id、车主id、服务日期值1、“用户2”、“2016-03-02”;
在tb_示例中插入汽车识别号、车主识别号、服务日期值1、“用户3”、“2016-11-02”;
在tb_示例中插入汽车识别号、车主识别号、服务日期值1、“用户4”、“2017-01-02”;
在tb_示例中插入汽车识别号、车主识别号、服务日期值1、“用户4”、“2017-02-12”;
在tb_示例中插入汽车id、车主id、服务日期值1、“用户1”、“2017-03-22”;
在tb_示例中插入汽车id、车主id、服务日期值1、“用户2”、“2017-03-24”;
选择*,
按车辆id划分的密集等级,按服务日期划分的所有者id订单为rnk
从tb_的例子
按服务日期订购;
试试这个:
;WITH CTE AS
(
SELECT *,
CASE
WHEN owner_id <> COALESCE(LAG(owner_id) OVER
(PARTITION BY car_id ORDER BY service_date), owner_id)
THEN 1
ELSE 0
END AS grp
FROM #tb_example
)
SELECT *,
SUM(grp) OVER (PARTITION BY car_id ORDER BY service_date) + 1 AS rnk
FROM cte
ORDER BY service_date;
该查询使用LAG来检测同一个car\u id分区内的owner\u id的变化,其顺序由servic\u date定义
使用grp字段,我们使用SUMgrp OVER。。将排名计算为连续的变化总数。您没有使用密集的排名,而是使用了排名