根据条件为记录分配等级

阿比舍克·吉尼亚尼

我有一张包含以下记录的表:

=======================
| ID    |  device_num |
=======================
|  1    |      11     |
|  2    |      11     | 
|  3    |      NULL   |
|  4    |      11     |
|  5    |      11     |
|  6    |      NULL   |
|  7    |      11     |
|  8    |      12     |
|  9    |      12     |
|  10   |      13     |
|  11   |      NULL   | 
|  12   |      13     |
|  13   |      13     |
|  14   |      13     |
|  15   |      14     |
|  16   |      14     |
=======================

我想根据以下情况为每个设备编号分配一个等级:

1-等级应从1开始。

2-如果每个记录都具有相同的设备编号,则应将每个记录与其先前的记录进行比较,然后为记录分配相同的等级。

3-不要为NULL记录分配等级如果在Null记录后获得相同的设备号,则排名应增加一。

4-如果设备编号与先前的记录不匹配,则将等级提高1。

所需的输出:

===============================
| ID    | RANK  |  device_num |
===============================
|  1    |  1    |      11     |
|  2    |  1    |      11     | 
|  3    |       |      NULL   |
|  4    |  2    |      11     |
|  5    |  2    |      11     |
|  6    |       |      NULL   |
|  7    |  3    |      11     |
|  8    |  4    |      12     |
|  9    |  4    |      12     |
|  10   |  5    |      13     |
|  11   |       |      NULL   | 
|  12   |  6    |      13     |
|  13   |  6    |      13     |
|  14   |  6    |      13     |
|  15   |  7    |      14     |
|  16   |  7    |      14     |
===============================

我曾尝试与PostgreSQL的排名功能denserank等,但不能在此顺序分配级别。

乔治·贝索斯(Giorgos Betsos)

尝试这个:

SELECT id, device_num, 
       CASE 
         WHEN device_num IS NOT NULL 
         THEN DENSE_RANK() OVER (ORDER BY CASE 
                                            WHEN device_num IS NOT NULL
                                            THEN min_id 
                                          END) 
       END AS RANK
FROM (
  SELECT id, device_num, 
         MIN(id) OVER (PARTITION BY device_num, grp) AS min_id
  FROM (
  SELECT id, device_num,
         ROW_NUMBER() OVER (ORDER BY id) - 
         ROW_NUMBER() OVER (PARTITION BY CASE 
                                           WHEN device_num IS NULL THEN -1 
                                           ELSE device_num
                                         END
                            ORDER BY id) AS grp
  FROM mytable) AS t) AS s
ORDER BY id

我做出的假设是:

  1. id表格中有一个自动递增字段,用于指定行顺序。
  2. device_num字段integer类型,-1并且不是该字段的有效值。

演示在这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据某些条件为火花数据框中的记录分配等级?

来自分类Dev

如何根据某些条件为火花数据框中的记录分配等级?

来自分类Dev

根据行SQL的类型为每行分配等级

来自分类Dev

根据条件为变量分配值

来自分类Dev

rspec-根据分配,新实例化的记录为nil

来自分类Dev

根据等级和条件过滤数据

来自分类Dev

根据两个条件为新列分配值

来自分类Dev

如何根据某些条件为行分配运行值

来自分类Dev

根据条件选择记录

来自分类Dev

根据条件删除记录

来自分类Dev

如何根据熊猫的等级分配最小值?

来自分类Dev

Excel查找可根据年龄和体重分配等级

来自分类Dev

简单的Python代码为数字等级分配相应的字母

来自分类Dev

以条件为条件更新记录

来自分类Dev

如何强制等级函数为等级相同的行分配不同的值?

来自分类Dev

先验等级为零时如何分配等级(第2部分)

来自分类Dev

根据条件分配numpy数组

来自分类Dev

根据条件分配组号

来自分类Dev

根据多个条件分配 ID

来自分类Dev

根据条件对记录进行计数

来自分类Dev

根据条件对记录进行计数

来自分类Dev

根据多个条件条件分配列值

来自分类Dev

根据R中其他向量的条件为数据帧中的向量分配值

来自分类Dev

根据多个字符串条件为新列分配值

来自分类Dev

我可以根据逻辑条件为MASS :: parcoord()分配颜色吗?

来自分类Dev

如何根据熊猫中的条件为数据框的子集的列分配值?

来自分类Dev

PostgreSQL-根据条件为每一行分配值

来自分类Dev

根据MongoDB中的条件为所有客户分配唯一价格的策略

来自分类Dev

我想根据函数中的条件为 priceFilter 分配一个真/假

Related 相关文章

热门标签

归档