根据SQL中多个列中的条件创建具有3个类别的Status列

Sharath

我有这样的桌子

CREATE TABLE proc_code (
    id INTEGER,
    c_date DATE,
    code VARCHAR(255)
);

INSERT INTO proc_code (id, c_date, code)
VALUES
  (101, '2017-12-21', '3027f'),
  (101, '2017-12-24', '3027f'),
  (102, '2017-10-09', '3027f'),
  (102, '2017-10-16', '3025f'),
  (102, '2017-10-23', '3027f'),
  (103, '2017-09-21', '3025f'),
  (104, '2017-07-23', '3027f'),
  (104, '2017-07-28', '3027f'),
  (104, '2017-07-31', '3025f'),
  (105, '2017-03-06', '3025f'),
  (105, '2017-03-16', '3027f'),
  (105, '2017-03-22', '3027f');

我正在尝试Status根据以下条件创建一个名为“ 的新列

查看date的最大值和最小值

  • Status=“不改变”,如果在值code列是相同的为MAX( date和分钟(date
  • Status=“已增加”,如果该code列中的值对于min(是' 3025f ',date对于max(date是' 3027f '
  • Status=“减少”,如果该code列中的值对于min(是' 3027f ',date对于max(date是' 3025f '

想要的输出

id  c_date      code    status
101 2017-12-21  3027f   Constant
101 2017-12-24  3027f   Constant
102 2017-10-09  3027f   Constant
102 2017-10-16  3025f   Constant
102 2017-10-23  3027f   Constant
103 2017-09-21  3025f   Constant
104 2017-07-23  3027f   Decreased
104 2017-07-28  3027f   Decreased
104 2017-07-31  3025f   Decreased
105 2017-03-06  3025f   Increased
105 2017-03-16  3027f   Increased
105 2017-03-22  3027f   Increased

我正在尝试以这种方式进行,但没有正确完成

select id, c_date, code, 
CASE WHEN ((max(c_date) > min(c_date) && (code == '3025f'))) THEN "Constant" ELSE "Increased" END AS Status
FROM proc_code
GROUP BY id, c_date, code

有没有一种有效的方法可以让我获得所需的输出?有人可以指出我正确的方向吗?

戈登·利诺夫

使用first_value()我将使用子查询使逻辑更容易理解:

select pc.*,
       (case when first_code = last_code then 'no change'
             when first_code = '3025f' and last_code = '3027f' then 'increasing'
             when first_code = '3027f' and last_code = '3025f' then 'decreasing'
             else 'something else'
        end) as status
from (select pc.*,
             first_value(code) over (partition by id order by c_date) as first_code,
             first_value(code) over (partition by id order by c_date desc) as last_code,
      from proc_code pc
     ) pc

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Tidyverse 中根据字符串模式创建具有多个类别的列

R:根据其他两列的标准,创建一个具有多个类别(级别)的新列

熊猫-如何根据多列的条件创建具有3个输出的列

根据条件在sql中创建列?

根据条件在sql中创建新列?

标签编码具有相同类别的多个列

在R中具有相同列类别的数据框中查找上一个日期

根据R中的其他列插入类别的列

如何在Seaborn中创建具有多个组或类别的联合图?

如何使用SQL select筛选具有类别的行以根据条件联接其他(多个)表?

根据其他列中的多个条件创建列值

Laravel从具有一个或多个类别的数据库中获取数据

如何找到硒中具有多个类别的元素

pandas:根据其他列中的条件创建具有字符串值的列

如何根据具有不同数据类型的两列中的条件创建新列?

根据具有多个值的其他列中的值创建新列

如何根据一个类别的值对 dot ggplot 中的一列重新排序?

根据其他列创建一个具有值的新列 - 在 R 中

根据多个不同的条件在 pandas 数据框中创建了一个新列

如何在具有50个以上类别的新列中更轻松地将类别分配给字符串

根据多个条件在pandas中添加具有不同输出的两列

根据 r 中的多个条件创建新列

在熊猫中创建一个基于频率的类别的新列

如何根据另一列 SQL 中的值创建具有计数值的新列

聚合具有R中列的不同类别的数据

根据R中具有已修改名称的先前列的值创建多个新列

熊猫:根据不同列中的类别对多个列的值进行分组。然后根据该类别的分组计算平均值

Sqlite:从具有多个条件的另一个表中的多个列更新

在多个列中具有多个条件和OR逻辑的SUMIFS