我有一个类似下面的查询,该查询基于 原始时间 列是否小于或早于 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
基本上不运行这两个查询,而是对其进行调整以解决这两个问题?
感谢您的时间!
答案 0 :(得分:0)
我认为这是您所需要的:
如果其中一个条件小于等于或大于等于,则可能不需要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
答案 1 :(得分:0)
您可以使用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_time
和m.start_time
不相等的情况,因此上面的查询中的WHERE
子句。