Sql 选择min date列时提供column=值,比较两列
我有下表Sql 选择min date列时提供column=值,比较两列,sql,hive,hiveql,Sql,Hive,Hiveql,我有下表 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,其他值为零 输出类似这样的内容 另外还有其他条件,如果日期列为空,则取列。。。如果col_
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,其他值为零
输出类似这样的内容
另外还有其他条件,如果日期列为空,则取列。。。如果col_e=r,则1作为新的col,如果col_e为null,则取col_f..if col_f..if col_f最低值..如wise 6其他条件。但同时,就第一个问题而言,您可以尝试以下方法:
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)
唯一应该用于日期的格式是ISO格式YYYY-MM-dd是的,它是YYYY-MM-dd。我的坏..嗨,都都。。我得到了新专栏的所有“1”。明白了。。我已将Secu id作为我的Secu id。。。原来是f_id。谢谢都都。@Ankita-为什么你评论它在一个显然不起作用的代码上工作?因为它只需要一些小的修改。
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)
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 |
+-----+--------+------------+------------+