2017-05-23 32 views
0

我具有以下表提供列=值與選擇分鐘日期欄,比較2列

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和其他零。

輸出這樣的事情 output table

|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 ..如果col_f具有最低值,就像明智的6個條件一樣。但同時只是date_col。

+0

應使用的日期的唯一格式是ISO格式'YYYY- MM-DD' –

+0

是的,它是yyyy-mm-dd。我的壞.. – Ankita

回答

0
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 | 
+-----+--------+------------+------------+ 
+0

嗨Dudu ..即時通訊獲取所有'1'爲new_column。 – Ankita

+0

這是一個測試代碼 –

+0

明白了..我已將sec_id作爲我的sec_id ...原來是f_id。Thanku Dudu。 – Ankita

-1

至於第一個問題而言,你可以嘗試以下操作:

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) 
+0

(1)測試你的代碼(2)使用Windows功能 –

+0

Thanku @Robert ..它的工作... – Ankita

+0

我只是編輯「where t2.date_col in(SELECT MIN(date_col)...... ...「 – Ankita