Select 只有符合条件的值
Select only values that match the conditions
我有以下(示例)table:
+----------+--------------+------------+------------+------------+
| Customer | Subscription | Status | Start Date | End Date |
+----------+--------------+------------+------------+------------+
| 1 | 1a001 | Pending | 02.02.2020 | |
| 1 | 1b002 | Pending | 02.02.2020 | 05.02.2020 |
| 1 | 1c003 | Rejected | 02.02.2020 | |
| 1 | 1d004 | Incomplete | 02.02.2020 | |
| 1 | 1e005 | Pending | 07.02.2020 | |
| 1 | 1f006 | Active | 07.02.2020 | |
| 2 | 2a001 | Pending | 02.02.2020 | |
| 2 | 2b002 | Pending | 02.02.2020 | |
| 2 | 3c003 | Rejected | 02.02.2020 | |
| 2 | 4d004 | Incomplete | 02.02.2020 | |
| 2 | 5e005 | Pending | 07.02.2020 | 07.02.2020 |
| 2 | 6f006 | Active | 07.02.2020 | |
+----------+--------------+------------+------------+------------+
目标是 select 仅活跃客户。假设和条件是:
- 一个 Customer_no 可以有多个订阅。
- 活跃客户 = 至少有一个活跃订阅的客户。
- 活动订阅是在以下情况下:状态 = 活动,start_date >= sysdate() 并且没有 end_date。
我将有很长的状态列表,可以使用 CASE 语句映射。是否知道如何根据该示例 select 区分活跃客户?我是初学者,不知道如何开始这个任务。
谢谢,帕维尔
你的活跃客户条件可以这样写:
status = 'Active' and start_date >= curdate() and end_date is null
所以group by customer
并使用having
子句中的条件:
select customer
from tablename
group by customer
having sum(status = 'Active' and start_date >= curdate() and end_date is null)
如果 sum()
returns 0
那么它被评估为 false
.
在任何其他情况下,它被评估为 true
.
我有以下(示例)table:
+----------+--------------+------------+------------+------------+
| Customer | Subscription | Status | Start Date | End Date |
+----------+--------------+------------+------------+------------+
| 1 | 1a001 | Pending | 02.02.2020 | |
| 1 | 1b002 | Pending | 02.02.2020 | 05.02.2020 |
| 1 | 1c003 | Rejected | 02.02.2020 | |
| 1 | 1d004 | Incomplete | 02.02.2020 | |
| 1 | 1e005 | Pending | 07.02.2020 | |
| 1 | 1f006 | Active | 07.02.2020 | |
| 2 | 2a001 | Pending | 02.02.2020 | |
| 2 | 2b002 | Pending | 02.02.2020 | |
| 2 | 3c003 | Rejected | 02.02.2020 | |
| 2 | 4d004 | Incomplete | 02.02.2020 | |
| 2 | 5e005 | Pending | 07.02.2020 | 07.02.2020 |
| 2 | 6f006 | Active | 07.02.2020 | |
+----------+--------------+------------+------------+------------+
目标是 select 仅活跃客户。假设和条件是:
- 一个 Customer_no 可以有多个订阅。
- 活跃客户 = 至少有一个活跃订阅的客户。
- 活动订阅是在以下情况下:状态 = 活动,start_date >= sysdate() 并且没有 end_date。
我将有很长的状态列表,可以使用 CASE 语句映射。是否知道如何根据该示例 select 区分活跃客户?我是初学者,不知道如何开始这个任务。
谢谢,帕维尔
你的活跃客户条件可以这样写:
status = 'Active' and start_date >= curdate() and end_date is null
所以group by customer
并使用having
子句中的条件:
select customer
from tablename
group by customer
having sum(status = 'Active' and start_date >= curdate() and end_date is null)
如果 sum()
returns 0
那么它被评估为 false
.
在任何其他情况下,它被评估为 true
.