无法使用密集排名获得所需的输出
Unable to get desired output using Dense Rank
能否请您帮助我如何获得预期的输出,如下面的屏幕截图所示?
DECLARE @TT TABLE ( CUSTOMERID INT, TYPE VARCHAR(100) , D1 DATE)
INSERT INTO @TT VALUES ( 15001,'TYPE1', '4/1/2017')
INSERT INTO @TT VALUES ( 15001,'TYPE1', '4/2/2017')
INSERT INTO @TT VALUES ( 15001,'TYPE1', '4/3/2017')
INSERT INTO @TT VALUES ( 15001,'NON TYPE1', '4/4/2017')
INSERT INTO @TT VALUES ( 15001,'NON TYPE1', '4/5/2017')
INSERT INTO @TT VALUES ( 15001,'NON TYPE1', '4/6/2017')
INSERT INTO @TT VALUES ( 245,'Non TYPE1', '4/1/2017')
INSERT INTO @TT VALUES ( 245,'Non TYPE1', '4/2/2017')
INSERT INTO @TT VALUES ( 245,'Non TYPE1', '4/3/2017')
INSERT INTO @TT VALUES ( 245,'TYPE1', '4/4/2017')
INSERT INTO @TT VALUES ( 245,'TYPE1', '4/5/2017')
INSERT INTO @TT VALUES ( 245,'TYPE1', '4/6/2017')
一个查询是:
SELECT * ,
DENSE_RANK() OVER ( PARTITION BY CUSTOMERID ORDER BY CUSTOMERID,TYPE) DR
FROM @TT
WHERE CUSTOMERID = 15001
ORDER BY CUSTOMERID,D1
SELECT *,
DENSE_RANK() OVER ( PARTITION BY CUSTOMERID ORDER BY CUSTOMERID,TYPE) DR
FROM @TT
WHERE CUSTOMERID = 245
ORDER BY CUSTOMERID,D1
感谢您的帮助。
您想按最短日期对团体进行排序。我认为是这样的:
SELECT t.*,
DENSE_RANK() OVER ( PARTITION BY CUSTOMERID ORDER BY mind1, TYPE) DR
FROM (SELECT t.*, MIN(d1) OVER (PARTITION BY CUSTOMERID, TYPE) as mind1
FROM @TT t
) t
WHERE CUSTOMERID = 15001
ORDER BY CUSTOMERID, D1;
这种假设类型没有交错(如您的示例所示)。如果是这样,请再问一个问题。这大大改变了问题。该问题还应提供更好的样本数据和预期结果。
能否请您帮助我如何获得预期的输出,如下面的屏幕截图所示?
DECLARE @TT TABLE ( CUSTOMERID INT, TYPE VARCHAR(100) , D1 DATE)
INSERT INTO @TT VALUES ( 15001,'TYPE1', '4/1/2017')
INSERT INTO @TT VALUES ( 15001,'TYPE1', '4/2/2017')
INSERT INTO @TT VALUES ( 15001,'TYPE1', '4/3/2017')
INSERT INTO @TT VALUES ( 15001,'NON TYPE1', '4/4/2017')
INSERT INTO @TT VALUES ( 15001,'NON TYPE1', '4/5/2017')
INSERT INTO @TT VALUES ( 15001,'NON TYPE1', '4/6/2017')
INSERT INTO @TT VALUES ( 245,'Non TYPE1', '4/1/2017')
INSERT INTO @TT VALUES ( 245,'Non TYPE1', '4/2/2017')
INSERT INTO @TT VALUES ( 245,'Non TYPE1', '4/3/2017')
INSERT INTO @TT VALUES ( 245,'TYPE1', '4/4/2017')
INSERT INTO @TT VALUES ( 245,'TYPE1', '4/5/2017')
INSERT INTO @TT VALUES ( 245,'TYPE1', '4/6/2017')
一个查询是:
SELECT * ,
DENSE_RANK() OVER ( PARTITION BY CUSTOMERID ORDER BY CUSTOMERID,TYPE) DR
FROM @TT
WHERE CUSTOMERID = 15001
ORDER BY CUSTOMERID,D1
SELECT *,
DENSE_RANK() OVER ( PARTITION BY CUSTOMERID ORDER BY CUSTOMERID,TYPE) DR
FROM @TT
WHERE CUSTOMERID = 245
ORDER BY CUSTOMERID,D1
感谢您的帮助。
您想按最短日期对团体进行排序。我认为是这样的:
SELECT t.*,
DENSE_RANK() OVER ( PARTITION BY CUSTOMERID ORDER BY mind1, TYPE) DR
FROM (SELECT t.*, MIN(d1) OVER (PARTITION BY CUSTOMERID, TYPE) as mind1
FROM @TT t
) t
WHERE CUSTOMERID = 15001
ORDER BY CUSTOMERID, D1;
这种假设类型没有交错(如您的示例所示)。如果是这样,请再问一个问题。这大大改变了问题。该问题还应提供更好的样本数据和预期结果。