繁体   English   中英

提供column =值并选择最小日期列,比较2列

[英]provide column= value with selecting min date column ,compare 2 columns

我有下表

sec_id|pri_id   |date_col|  
abc|    1   |28-02-2017|    
bcd|    1   |09-01-2017|    
ef| 1   |   |
ghi|    2   |04-04-2017|    
jkl|    2   |05-05-2016|

如果sec_id属于相同的pri_id,则选择日期最早的sec_id,并将其值设置为1,其他设置为零。

输出类似此输出表的内容

|sec_id |pri_id |date_col  |new_column |
|abc    |1  |28-02-2017|    0|
|bcd    |1  |09-01-2017|    1|
|ef |1  |      |    0|
|ghi    |2  |04-04-2017|    0|
|jkl    |2  |05-05-2016|    1|

select f_id, s_id, case when min(cast(date_id as timestamp)) then 1 else 0 end as new_column from test_sc group by f_id,s_id. 

再加上还有其他条件,如果date_col为null,则采用col_e ...如果col_e = r则为1作为新的new_col,如果col_e为null,则采用col_f ..if col_f具有最低的值..像明智的6个条件。 但与此同时date_col。

select  *
       ,case 
            when pri_id = min(pri_id) over (partition by sec_id) 
            then 1 
            else 0 
        end as new_column

from    mytable

+-----+--------+------------+------------+
| dt  | sec_id |   pri_id   | new_column |
+-----+--------+------------+------------+
| ef  |      1 | (null)     |          0 |
| bcd |      1 | 2017-01-09 |          1 |
| abc |      1 | 2017-02-28 |          0 |
| jkl |      2 | 2016-05-05 |          1 |
| ghi |      2 | 2017-04-04 |          0 |
+-----+--------+------------+------------+

就第一个问题而言,您可以尝试以下操作:

SELECT t1.sec_id,
       t1.pri_id,
       t1.date_col,
       CASE WHEN t1.date_col = t2.date_col THEN 1 ELSE 0 END AS new_column
FROM   my_table t1
JOIN   my_table t2
  ON   t1.pri_id = t2.pri_id
 AND   t2.date_col = (SELECT MIN(date_col)
                      FROM   my_table t3
                      WHERE  t2.pri_id = t3.pri_id)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM