调整查询以考虑 if 语句?



>我有一个如下所示的查询,其中根据original_time列是否小于或早于start_time,然后它给了我第一次作为时间列的时间列,该时间列正在从日期差异计算字段中的原始时间列中减去,如下所示。

表 m 有两个时间列,也是一个second_time列,有没有办法调整下面的查询,以根据t.original_time列是否小于或早于start_time列,那么m.first_time列正在计算字段中使用,以及t.original_time列是否>或晚于m.start_time字段,那么它将使用计算字段中的m.second_time列?而不是运行此查询两次?

SELECT t.id,
t.time,
m.first_time,
date_diff('minute',m.first_time, t.original_time) AS Calculation
FROM table t
JOIN table m ON t.id = m.id
WHERE t.original_time < m.start_time

我正在运行的第二个查询是:

SELECT t.id,
t.time,
m.second_time,
date_diff('minute',m.second_time, t.original_time) AS Calculation
FROM table t
JOIN table m ON t.id = m.id
WHERE t.original_time > m.start_time

基本上,与其运行这两个查询,不如对其进行调整以同时考虑两者?

谢谢你的时间!

我认为这就是你需要的:

也许如果其中一个条件不太相等或更大相等,则不需要 Where 子句。

SELECT t.id,
t.time,
m.first_time,
m.second_time,
case 
when t.original_time < m.start_time then           
date_diff('minute',m.first_time, t.original_time)
else
null
end as calculation_less,
case 
when t.original_time > m.start_time then           
date_diff('minute',m.second_time, t.original_time)
else
null
end as calculation_greater   
FROM table t
JOIN table m ON t.id = m.id
WHERE t.original_time < m.start_time or 
t.original_time > m.start_time

您可以使用if这样做:

SELECT t.id,
t.time,
if(t.original_time < m.start_time, m.first_time, m.second_time),
date_diff('minute', if(t.original_time < m.start_time, m.first_time, m.second_time), t.original_time) AS Calculation
FROM table t
JOIN table m ON t.id = m.id
WHERE t.original_time <> m.start_time

请注意,您的查询仅考虑t.original_timem.start_time彼此不相等的情况,因此在上面的查询中使用了WHERE子句。

最新更新