仅当其他列具有特定值时才使用Datediff

问题描述 投票:0回答:1

要显示天数(以天数为单位,但仅当状态为“进行中”时才显示的查询,对于状态为“完成”的查询,只需要显示“完成”的值]

当前MySQL查询

SELECT
id,
due_date,
process_1,
process_2,
CASE WHEN FLOOR((IF(process_1= 'Done', 1, 0) + IF(process_2= 'Done', 1, 0))/2 * 100) = 100 THEN 'Done'
ELSE 'Ongoing' END AS status,
DATEDIFF(due_date, CURDATE())) AS days_left
FROM table1

下面是我的结果

+---------------------------------------------------------------+
| id | due_date   | process_1 | process_2 | status  | days_left |
+ ----------------------------+-----------+---------+-----------+
|  1 | 10/01/2020 | ongoing   | ongoing   | ongoing |    3      |
|  2 | 10/01/2020 | done      | done      | done    |    3      |
+---------------------------------------------------------------+

我想要的结果

+---------------------------------------------------------------+
| id | due_date   | process_1 | process_2 | status  | days_left |
+ ----------------------------+-----------+---------+-----------+
|  1 | 10/01/2020 | ongoing   | ongoing   | ongoing |    3      |
|  2 | 10/01/2020 | done      | done      | done    |   done    |
+---------------------------------------------------------------+
mysql
1个回答
0
投票

在查询中,您具有用于计算status的方程式。您可以再次使用相同的方程式指定days_left,有点像:

SELECT
id,   
due_date,
process_1,
process_2,
CASE WHEN 
  FLOOR((IF(process_1= 'Done', 1, 0) + IF(process_2= 'Done', 1, 0))/2 * 100) = 100 
  THEN 'Done'
  ELSE 'Ongoing' END AS status
CASE WHEN 
  FLOOR((IF(process_1= 'Done', 1, 0) + IF(process_2= 'Done', 1, 0))/2 * 100) = 100 
  THEN 'Done' 
  ELSE DATEDIFF(due_date, CURDATE())) END AS days_left
FROM table1
© www.soinside.com 2019 - 2024. All rights reserved.