sql写一个字段的值等于条件7-13天为‘7天未跟进’,14-30天为‘14天未跟进’
时间: 2024-03-08 19:46:36 浏览: 7
假设字段名为"follow_up_days",可以使用CASE WHEN语句实现:
```
SELECT
CASE
WHEN follow_up_days BETWEEN 7 AND 13 THEN '7天未跟进'
WHEN follow_up_days BETWEEN 14 AND 30 THEN '14天未跟进'
ELSE follow_up_days
END AS follow_up_status
FROM your_table;
```
其中,第一个WHEN表示当字段"follow_up_days"的值在7-13之间时,将其转换为"7天未跟进";第二个WHEN表示当字段"follow_up_days"的值在14-30之间时,将其转换为"14天未跟进";ELSE表示如果不满足前两个条件,则返回原始值。最后使用AS关键字将新生成的字段命名为"follow_up_status"。
相关问题
用SQL计算客户级过账单日未还款客户的1-30天回收率
要计算客户级过账单日未还款客户的1-30天回收率,需要先确定哪些客户在过账单日当天有未还款项,然后计算这些客户在1-30天内回收的贷款金额占总未还款额的比例。可以使用以下SQL语句进行计算:
```
SELECT customer_id,
SUM(CASE WHEN overdue_days <= 30 THEN recovered_amount ELSE 0 END) AS m1_recovered_amount,
SUM(CASE WHEN overdue_days > 0 THEN overdue_amount ELSE 0 END) AS total_overdue_amount,
(SUM(CASE WHEN overdue_days <= 30 THEN recovered_amount ELSE 0 END) / SUM(CASE WHEN overdue_days > 0 THEN overdue_amount ELSE 0 END)) AS m1_recovery_rate
FROM (
SELECT customer_id,
loan_amount AS overdue_amount,
CASE
WHEN DATEDIFF(CURDATE(), due_date) > 30 THEN DATEDIFF(CURDATE(), due_date) - 30
WHEN DATEDIFF(CURDATE(), due_date) > 0 THEN DATEDIFF(CURDATE(), due_date)
ELSE 0
END AS overdue_days,
CASE WHEN recovered_date IS NOT NULL THEN loan_amount ELSE 0 END AS recovered_amount
FROM loan_table
WHERE due_date <= CURDATE() AND recovered_date IS NULL
) AS temp
GROUP BY customer_id;
```
在以上SQL语句中,loan_table是包含贷款信息的表,包括贷款金额、到期日、客户ID、还款日期等字段。首先使用WHERE子句筛选出在过账单日当天有未还款项的贷款,并为每个未还款贷款计算逾期天数和回收金额,然后使用GROUP BY子句按客户ID进行分组,计算每个客户的1-30天回收率。其中,m1_recovered_amount表示1-30天内回收的贷款金额,total_overdue_amount表示总未还款额,m1_recovery_rate表示1-30天回收率。
给定注册表和登录表,⽤⼀个sql求1-7天留存
要求1-7天留存,需要用到登录表和注册表,其中登录表记录用户每天的登录情况,注册表记录用户注册的日期。假设登录表为login,注册表为register,其中login表包含用户ID(user_id)和登录日期(login_date)两个字段,register表包含用户ID(user_id)和注册日期(register_date)两个字段,则可以使用以下SQL语句计算1-7天留存:
```
SELECT
COUNT(DISTINCT l7.user_id) / COUNT(DISTINCT r.user_id) AS retention_rate
FROM
login l1
JOIN register r ON l1.user_id = r.user_id
LEFT JOIN login l7 ON l1.user_id = l7.user_id AND DATEDIFF(l7.login_date, l1.login_date) = 6
WHERE
l1.login_date = DATE_SUB(r.register_date, INTERVAL 1 DAY) AND
l1.login_date BETWEEN '2022-01-01' AND '2022-01-07' AND
r.register_date BETWEEN '2022-01-01' AND '2022-01-07';
```
以上SQL语句使用了三个表的JOIN操作,分别是login表自连接,register表和login表的LEFT JOIN连接。其中,login表自连接是为了找到每个用户在第一天(注册当天)和第七天的登录记录,register表和login表的LEFT JOIN连接是为了保证每个注册用户都能被计算在留存率中。
具体来说,SQL语句中的WHERE条件限制了查询的时间范围和用户登录的时间条件,查询的是从2022年1月1日到2022年1月7日每天的留存率。其中,l1.login_date = DATE_SUB(r.register_date, INTERVAL 1 DAY)表示在用户注册当天的前一天(即T-1)登录,l1.login_date BETWEEN '2022-01-01' AND '2022-01-07'表示在1-7天内的登录记录,r.register_date BETWEEN '2022-01-01' AND '2022-01-07'表示在1-7天内注册的用户。
最后,将查询结果按照留存率(retention_rate)进行计算,即计算第7天的留存用户数除以第1天的注册用户数。