Mysql 基于数据库表其他行中的值设置一列的值
我有一张这样的桌子:Mysql 基于数据库表其他行中的值设置一列的值,mysql,Mysql,我有一张这样的桌子: | Date | Name | Activity | +------------+------+----------+ | 2018-01-01 | A | 1 | | 2018-01-01 | B | 0 | | 2018-01-01 | C | 0 | | 2018-02-01 | A | 0 | | 2018-02-01 | B | 1 | | 2018-0
| Date | Name | Activity |
+------------+------+----------+
| 2018-01-01 | A | 1 |
| 2018-01-01 | B | 0 |
| 2018-01-01 | C | 0 |
| 2018-02-01 | A | 0 |
| 2018-02-01 | B | 1 |
| 2018-02-01 | C | 0 |
| 2018-03-01 | A | 0 |
| 2018-03-01 | B | 0 |
| 2018-03-01 | C | 0 |
我需要添加一列status
,该列根据activity
列中的值为名称显示为active或inactive
例如:
- 如果在1月份,名称A的活动为1,则状态应为“活动”
- 如果在2月份,名称A的活动为1,则应仅显示为活动;如果名称A为0,则应显示为活动,因为在1月份,名称A的活动为活动,因此在整个过程中,名称A应显示为活动
- 只有在上个月的数据中其活动为0,而本月的活动为1时,我们才应该更改数据
| Date | Name | Activity | Status |
+------------+------+----------+--------+
| 2018-01-01 | A | 1 | A |
| 2018-01-01 | B | 0 | I |
| 2018-01-01 | C | 0 | I |
| 2018-02-01 | A | 0 | A |
| 2018-02-01 | B | 1 | A |
| 2018-02-01 | C | 0 | I |
| 2018-03-01 | A | 0 | A |
| 2018-03-01 | B | 0 | A |
| 2018-03-01 | C | 0 | I |
MySQL 5.6架构设置:
create table user_activity(id int(11) not null auto_increment,
month date,name varchar(15),
activity enum('A','I'),primary key(id) );
insert into user_activity (month,name,activity) values('2019-01-01','alpha','A');
insert into user_activity (month,name,activity) values('2019-02-01','alpha','I');
insert into user_activity (month,name,activity) values('2019-03-01','alpha','A');
insert into user_activity (month,name,activity) values('2019-01-01','beta','A');
insert into user_activity (month,name,activity) values('2019-02-01','beta','I');
select * from user_activity
| id | month | name | activity |
|----|------------|-------|----------|
| 1 | 2019-01-01 | alpha | A |
| 2 | 2019-02-01 | alpha | I |
| 3 | 2019-03-01 | alpha | A |
| 4 | 2019-01-01 | beta | A |
| 5 | 2019-02-01 | beta | I |
select max(month),name,activity
from user_activity
where activity='A'
group by name
| max(month) | name | activity |
|------------|-------|----------|
| 2019-03-01 | alpha | A |
| 2019-01-01 | beta | A |
查询1:
create table user_activity(id int(11) not null auto_increment,
month date,name varchar(15),
activity enum('A','I'),primary key(id) );
insert into user_activity (month,name,activity) values('2019-01-01','alpha','A');
insert into user_activity (month,name,activity) values('2019-02-01','alpha','I');
insert into user_activity (month,name,activity) values('2019-03-01','alpha','A');
insert into user_activity (month,name,activity) values('2019-01-01','beta','A');
insert into user_activity (month,name,activity) values('2019-02-01','beta','I');
select * from user_activity
| id | month | name | activity |
|----|------------|-------|----------|
| 1 | 2019-01-01 | alpha | A |
| 2 | 2019-02-01 | alpha | I |
| 3 | 2019-03-01 | alpha | A |
| 4 | 2019-01-01 | beta | A |
| 5 | 2019-02-01 | beta | I |
select max(month),name,activity
from user_activity
where activity='A'
group by name
| max(month) | name | activity |
|------------|-------|----------|
| 2019-03-01 | alpha | A |
| 2019-01-01 | beta | A |
[结果][2]:
create table user_activity(id int(11) not null auto_increment,
month date,name varchar(15),
activity enum('A','I'),primary key(id) );
insert into user_activity (month,name,activity) values('2019-01-01','alpha','A');
insert into user_activity (month,name,activity) values('2019-02-01','alpha','I');
insert into user_activity (month,name,activity) values('2019-03-01','alpha','A');
insert into user_activity (month,name,activity) values('2019-01-01','beta','A');
insert into user_activity (month,name,activity) values('2019-02-01','beta','I');
select * from user_activity
| id | month | name | activity |
|----|------------|-------|----------|
| 1 | 2019-01-01 | alpha | A |
| 2 | 2019-02-01 | alpha | I |
| 3 | 2019-03-01 | alpha | A |
| 4 | 2019-01-01 | beta | A |
| 5 | 2019-02-01 | beta | I |
select max(month),name,activity
from user_activity
where activity='A'
group by name
| max(month) | name | activity |
|------------|-------|----------|
| 2019-03-01 | alpha | A |
| 2019-01-01 | beta | A |
查询2:
create table user_activity(id int(11) not null auto_increment,
month date,name varchar(15),
activity enum('A','I'),primary key(id) );
insert into user_activity (month,name,activity) values('2019-01-01','alpha','A');
insert into user_activity (month,name,activity) values('2019-02-01','alpha','I');
insert into user_activity (month,name,activity) values('2019-03-01','alpha','A');
insert into user_activity (month,name,activity) values('2019-01-01','beta','A');
insert into user_activity (month,name,activity) values('2019-02-01','beta','I');
select * from user_activity
| id | month | name | activity |
|----|------------|-------|----------|
| 1 | 2019-01-01 | alpha | A |
| 2 | 2019-02-01 | alpha | I |
| 3 | 2019-03-01 | alpha | A |
| 4 | 2019-01-01 | beta | A |
| 5 | 2019-02-01 | beta | I |
select max(month),name,activity
from user_activity
where activity='A'
group by name
| max(month) | name | activity |
|------------|-------|----------|
| 2019-03-01 | alpha | A |
| 2019-01-01 | beta | A |
[结果][3]:
create table user_activity(id int(11) not null auto_increment,
month date,name varchar(15),
activity enum('A','I'),primary key(id) );
insert into user_activity (month,name,activity) values('2019-01-01','alpha','A');
insert into user_activity (month,name,activity) values('2019-02-01','alpha','I');
insert into user_activity (month,name,activity) values('2019-03-01','alpha','A');
insert into user_activity (month,name,activity) values('2019-01-01','beta','A');
insert into user_activity (month,name,activity) values('2019-02-01','beta','I');
select * from user_activity
| id | month | name | activity |
|----|------------|-------|----------|
| 1 | 2019-01-01 | alpha | A |
| 2 | 2019-02-01 | alpha | I |
| 3 | 2019-03-01 | alpha | A |
| 4 | 2019-01-01 | beta | A |
| 5 | 2019-02-01 | beta | I |
select max(month),name,activity
from user_activity
where activity='A'
group by name
| max(month) | name | activity |
|------------|-------|----------|
| 2019-03-01 | alpha | A |
| 2019-01-01 | beta | A |
欢迎来到StackOverflow!不幸的是,在目前的状态下,你的问题很难阅读,也很难理解你在问什么问题。请先阅读,然后再阅读您的问题以及这些页面中的建议,以帮助人们提供答案。我已尝试编辑您的问题,使其更具可读性(您可能已经注意到,当您阅读时,它会说“请勿发布代码、数据、错误消息等的图像”)。如果您进一步编辑它以包含您尝试过的代码的详细信息以及您遇到的问题的详细信息,你将是一个很好的问题。状态应根据“未添加的活动”手动计算共享输出的创建和插入查询,并共享输出的外观。是否有方法将其写入存储过程?那么,编辑后的输出是否是你想要的?