SQL 使用 AVG(DATEDIFF) 和 CASE 查询
SQL Query with AVG(DATEDIFF) and CASE
我尝试根据 table 的数据计算平均持续时间(天)。在此 table 我有三列:
- audit_process_completed(这是结束日期/格式:YYYY-MM-DD)
- audit_decision_date(这是开始日期/格式:YYYY-MM-DD)
- audit_created(如果 'audit_decision_date' (2.) = '0000-00-00',则这是 替代 开始日期
我现在想计算 1 和 2(如果不是“0000-00-00”)或 3(如果 2. 是“0000-00-00”)之间的天数时差。在开始 AVG(DATEDIFF)
之前,我尝试用 SQL CASE
定义正确的开始日期。请检查尝试。我找不到合适的解决方案。
SELECT audit_created, audit_decision_date, audit_process_completed
CASE audit_decision_date WHEN '0000-00-00' THEN audit_created ELSE audit_decision_date END AS start_date
(SELECT AVG(DATEDIFF (audit_process_completed, start_date)) AS duration
FROM audit WHERE general_audit_status = 'Abgeschlossen' AND assigned_auditor = 2
示例数据:
id
audit_process_completed
audit_decision_date
audit_created
1
2021-01-22
2021-01-17
2021-01-17
2
2021-01-27
0000-00-00
2021-01-20
3
2021-01-28
0000-00-00
2021-01-22
4
2021-02-01
2021-01-30
2021-01-24
期望的输出:
整个 table.
的平均天数持续时间
假设您正在使用 MySQL,您似乎想要 case
逻辑用于 avg()
:
select avg(datediff( audit_process_completed,
(case when audit_decision_date <> '0000-00-00' then audit_decision_date else audit_created end)
)
)
from audit
where general_audit_status = 'Abgeschlossen' and
assigned_auditor = 2
我尝试根据 table 的数据计算平均持续时间(天)。在此 table 我有三列:
- audit_process_completed(这是结束日期/格式:YYYY-MM-DD)
- audit_decision_date(这是开始日期/格式:YYYY-MM-DD)
- audit_created(如果 'audit_decision_date' (2.) = '0000-00-00',则这是 替代 开始日期
我现在想计算 1 和 2(如果不是“0000-00-00”)或 3(如果 2. 是“0000-00-00”)之间的天数时差。在开始 AVG(DATEDIFF)
之前,我尝试用 SQL CASE
定义正确的开始日期。请检查尝试。我找不到合适的解决方案。
SELECT audit_created, audit_decision_date, audit_process_completed
CASE audit_decision_date WHEN '0000-00-00' THEN audit_created ELSE audit_decision_date END AS start_date
(SELECT AVG(DATEDIFF (audit_process_completed, start_date)) AS duration
FROM audit WHERE general_audit_status = 'Abgeschlossen' AND assigned_auditor = 2
示例数据:
id | audit_process_completed | audit_decision_date | audit_created |
---|---|---|---|
1 | 2021-01-22 | 2021-01-17 | 2021-01-17 |
2 | 2021-01-27 | 0000-00-00 | 2021-01-20 |
3 | 2021-01-28 | 0000-00-00 | 2021-01-22 |
4 | 2021-02-01 | 2021-01-30 | 2021-01-24 |
期望的输出: 整个 table.
的平均天数持续时间假设您正在使用 MySQL,您似乎想要 case
逻辑用于 avg()
:
select avg(datediff( audit_process_completed,
(case when audit_decision_date <> '0000-00-00' then audit_decision_date else audit_created end)
)
)
from audit
where general_audit_status = 'Abgeschlossen' and
assigned_auditor = 2