我有一张ID不明显的表格。有一个日期字段和一个字段标题RISK,其值为“无”,“低”,“中”,“高”。它看起来像这样:
ID Date Risk
1743333 12/1/2017 Low
1743333 12/2/2017 Low
1743333 12/3/2017 None
1743333 12/4/2017 None
1743333 12/5/2017 Medium
1743333 12/6/2017 High
1265464 12/1/2017 High
1265464 12/2/2017 None
1265464 12/3/2017 None
1265464 12/4/2017 None
1265464 12/5/2017 High
1265464 12/6/2017 High
RISK字段由其他数据点和我没有的代码中的计算构建,或者确切地知道它的标准是什么。当没有足够的信息根据计算标准分配低,中或高时,基本上分配“无”值。我想要做的是,当RISK中的值为“无”时,我想根据该特定ID中的前一个日期(前一天)分配前一行的RISK值。因此,在任何一天,如果风险是“无”之外的任何事情,然后随着日期的进展变为“无”,我想保持之前的最新非“无”值。新表最终看起来像这样:
ID Date Risk
1743333 12/1/2017 Low
1743333 12/2/2017 Low
1743333 12/3/2017 Low
1743333 12/4/2017 Low
1743333 12/5/2017 Medium
1743333 12/6/2017 High
1265464 12/1/2017 High
1265464 12/2/2017 High
1265464 12/3/2017 High
1265464 12/4/2017 High
1265464 12/5/2017 Medium
1265464 12/6/2017 High
我不熟悉它,但我正在考虑使用变量赋值迭代行。我正在使用MySQL并尝试将其实现为case语句,因此我可以将结果分配给现有表中的新字段。在引用或加入MySQL中的同一个表时遇到了问题。在此先感谢,并为这篇漫长的帖子感到抱歉!
答案 0 :(得分:0)
使用日期差异的自联接可以如下实现。但是你会注意到没有'没有'仍会出现在结果中。
MySQL 5.6架构设置:
CREATE TABLE Table1
(`ID` int, `Date` datetime, `Risk` varchar(6))
;
INSERT INTO Table1
(`ID`, `Date`, `Risk`)
VALUES
(1743333, '2017-12-01 00:00:00', 'Low'),
(1743333, '2017-12-02 00:00:00', 'Low'),
(1743333, '2017-12-03 00:00:00', 'None'),
(1743333, '2017-12-04 00:00:00', 'None'),
(1743333, '2017-12-05 00:00:00', 'Medium'),
(1743333, '2017-12-06 00:00:00', 'High'),
(1265464, '2017-12-01 00:00:00', 'High'),
(1265464, '2017-12-02 00:00:00', 'None'),
(1265464, '2017-12-03 00:00:00', 'None'),
(1265464, '2017-12-04 00:00:00', 'None'),
(1265464, '2017-12-05 00:00:00', 'High'),
(1265464, '2017-12-06 00:00:00', 'High')
;
查询1 :
select
t.*, prev.risk as prev_risk
from table1 as t
inner join table1 as prev on t.id = prev.id and t.date = prev.date + interval 1 day
where t.risk = 'none'
<强> Results 强>:
| ID | Date | Risk | prev_risk |
|---------|----------------------|------|-----------|
| 1743333 | 2017-12-03T00:00:00Z | None | Low |
| 1743333 | 2017-12-04T00:00:00Z | None | None |
| 1265464 | 2017-12-02T00:00:00Z | None | High |
| 1265464 | 2017-12-03T00:00:00Z | None | None |
| 1265464 | 2017-12-04T00:00:00Z | None | None |