yarhosting
@yarhosting
Заказывайте программинг: PHP,SQL, JS,jQuery,Joomla

Как сделать условие в SQL запросе?

Как правильно сделать условие в SQL запросе? (MYSQL)

Хочу считать среднее время исполнения задач. Хотелось бы обойтись одним запросом, а не вложенными.

SELECT 
	count(t.id) c, 
	t.status_id, 
	AVG(
		CASE WHEN t.`is_close`=1 then 
			UNIX_TIMESTAMP (t.date_end) - UNIX_TIMESTAMP (t.date)
		else 
			UNIX_TIMESTAMP ( NOW()) - UNIX_TIMESTAMP (t.date) 
	) as time_avg 
	FROM tasks t 
	...
	GROUP BY t.status_id
	...


Если задача закрыта t.date_end=времени закрытия,
при t.`is_close`=0 -> t.date_end=0,
поэтому нужно считать относительно текущего времени
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
AVG( UNIX_TIMESTAMP( IF ( is_close=1, date_end, NOW() ) ) - UNIX_TIMESTAMP( date ) )
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
У вас и так один запрос, CASE подзапросом не является.
Но если бы вы вместо нуля использовали NULL для незавершённых задач, то выражение упростилось бы до IFNULL(`t`.`date_end`, NOW()).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы