首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序后的排名/分组结果

问排序后的排名/分组结果
EN

Stack Overflow用户
提问于 2017-03-17 06:25:47
回答 2查看 71关注 0票数 0

我有一个SQL查询,我正在尝试对排序后显示的结果进行排名/分组。

这适用于从一个存储位置(SLOC)到另一个存储位置(SLOC)的情况(UNIQSN)。我正在尝试获取它在存储位置之间按时间顺序旅行的历史。

“代码”胜过千言万语!

我尝试了下面的查询:

代码语言:javascript
复制
SELECT 
  uniqsn,
  SLOC,
  Update_DATETIME,
  RANK() OVER (PARTITION BY SLOC ORDER BY Update_DATETIME) RANKING
FROM TABLE

我得到了

代码语言:javascript
复制
UNIQSN  SLOC    UPDATE_DATETIME RANKING
6039133 C114    2014/10/13 16:35:18 1
6039133 C114    2015/02/23 07:58:22 2
6039133 C119    2014/09/23 20:57:30 1
6039133 C119    2014/09/23 20:57:57 2
6039133 C119    2014/09/25 08:11:19 3
6039133 C119    2015/01/29 17:39:50 4
6039133 C119    2015/01/29 17:42:02 5
6039133 C119    2015/01/30 09:01:02 6
6039133 C119    2017/03/04 09:46:21 7
6039133 C119    2017/03/04 09:46:28 8
6039133 C119    2017/03/09 07:18:27 9
6039133 C11M    2014/09/25 08:11:19 1
6039133 C11M    2014/10/13 12:11:44 2
6039133 C11M    2014/10/13 16:35:17 3
6039133 C11M    2014/10/14 07:58:59 4
6039133 C11M    2014/10/14 07:59:27 5
6039133 C11M    2014/10/14 08:03:06 6
6039133 C11M    2015/01/30 09:01:19 7
6039133 C11M    2015/02/20 14:08:37 8
6039133 C11M    2015/02/23 07:58:21 9
6039133 C11M    2017/03/09 07:18:28 10
6039133 C11Z    2014/10/14 08:03:07 1

相反,我正在尝试实现下面的结果。有人能帮上忙吗?

代码语言:javascript
复制
UNIQSN  SLOC    UPDATE_DATETIME     RANKING
6039133 C119    2014/09/23 20:57:30     1
6039133 C119    2014/09/23 20:57:57     1
6039133 C119    2014/09/25 08:11:19     1
6039133 C11M    2014/09/25 08:11:19     2
6039133 C11M    2014/10/13 12:11:44     2
6039133 C11M    2014/10/13 16:35:17     2
6039133 C114    2014/10/13 16:35:18     3
6039133 C11M    2014/10/14 07:58:59     4
6039133 C11M    2014/10/14 07:59:27     4
6039133 C11M    2014/10/14 08:03:06     4
6039133 C11Z    2014/10/14 08:03:07     5
6039133 C119    2015/01/29 17:39:50     6
6039133 C119    2015/01/29 17:42:02     6
6039133 C119    2015/01/30 09:01:02     6
6039133 C11M    2015/01/30 09:01:19     7
6039133 C11M    2015/02/20 14:08:37     7
6039133 C11M    2015/02/23 07:58:21     7
6039133 C114    2015/02/23 07:58:22     8
6039133 C119    2017/03/04 09:46:21     9
6039133 C119    2017/03/04 09:46:28     9
6039133 C119    2017/03/09 07:18:27     9
6039133 C11M    2017/03/09 07:18:28     10

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-17 06:45:03

你有一个缝隙和岛屿问题。此外,您希望按最早的日期对组进行排序(据我所知)。

为此,请执行以下操作:

代码语言:javascript
复制
select t.*, dense_rank() over (partition by uniqsqn order by min_ud) as ranking               
from (select t.*,
             min(update_datetime) over (partition by uniqsqn, sloc, seqnum - seqnum_us) as min_ud
      from (select t.*,
                   row_number() over (partition by unisqn order by update_datetime) as seqnum,
                   row_number() over (partition by uniqsqn, sloc order by update_datetime) as seqnum_us
            from t
           ) t
     ) t;
票数 1
EN

Stack Overflow用户

发布于 2017-03-17 23:19:12

代码语言:javascript
复制
;With Cte1
AS
(     
SELECT '6039133' AS UNIQSN, 'C114' AS SLOC,   '2014/10/13 16:35:18' AS UPDATE_DATETIME UNION ALL
SELECT '6039133', 'C114',   '2015/02/23 07:58:22'                                      UNION ALL
SELECT '6039133', 'C119',   '2014/09/23 20:57:30'                                      UNION ALL
SELECT '6039133', 'C119',   '2014/09/23 20:57:57'                                      UNION ALL
SELECT '6039133', 'C119',   '2014/09/25 08:11:19'                                      UNION ALL
SELECT '6039133', 'C119',   '2015/01/29 17:39:50'                                      UNION ALL
SELECT '6039133', 'C119',   '2015/01/29 17:42:02'                                      UNION ALL
SELECT '6039133', 'C119',   '2015/01/30 09:01:02'                                      UNION ALL
SELECT '6039133', 'C119',   '2017/03/04 09:46:21'                                      UNION ALL
SELECT '6039133', 'C119',   '2017/03/04 09:46:28'                                      UNION ALL
SELECT '6039133', 'C119',   '2017/03/09 07:18:27'                                      UNION ALL
SELECT '6039133', 'C11M',   '2014/09/25 08:11:19'                                      UNION ALL
SELECT '6039133', 'C11M',   '2014/10/13 12:11:44'                                      UNION ALL
SELECT '6039133', 'C11M',   '2014/10/13 16:35:17'                                      UNION ALL
SELECT '6039133', 'C11M',   '2014/10/14 07:58:59'                                      UNION ALL
SELECT '6039133', 'C11M',   '2014/10/14 07:59:27'                                      UNION ALL
SELECT '6039133', 'C11M',   '2014/10/14 08:03:06'                                      UNION ALL
SELECT '6039133', 'C11M',   '2015/01/30 09:01:19'                                      UNION ALL
SELECT '6039133', 'C11M',   '2015/02/20 14:08:37'                                      UNION ALL
SELECT '6039133', 'C11M',   '2015/02/23 07:58:21'                                      UNION ALL
SELECT '6039133', 'C11M',   '2017/03/09 07:18:28'                                      UNION ALL
SELECT '6039133', 'C11Z',   '2014/10/14 08:03:07'
)
,Cte2
AS
(
SELECT 
  uniqsn,
  SLOC,
  Update_DATETIME,
  RANK() OVER (PARTITION BY SLOC ORDER BY Update_DATETIME) RANKING
FROM Cte1
)
SELECT * from Cte2 Order by RANKING 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42845919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档