2013-09-15 5 views
1

У меня есть стол [праздничные дни] со следующей структурой:Как получить общее количество (разница между двумя датами)?

ID | start_date | end_date | user_id

Как получить количество праздников для пользователя в предыдущем году?

Я хочу что-то подобное с правильным синтаксисом:

SELECT SUM(end_date - start_date) 
FROM holidays 
WHERE user_id = 342 
    AND YEAR(end_date) = YEAR(CURRENT) - 1 

ответ

2

Я думаю, что это должно работать в Informix:

SELECT SUM(end_date-start_date) 
from holidays 
where user_id = 342 and 
    YEAR(end_date) = YEAR(TODAY)-1; 

Примечание: не ясно, является ли включено дата окончания или нет. Вы, возможно, захотите:

SELECT SUM((end_date-start_date) + 1) 
from holidays 
where user_id = 342 and 
    YEAR(end_date) = YEAR(TODAY)-1; 
1

Ваш запрос в порядке. У вас нет синтаксических улучшений. Единственное, что подход Гордона Линоффа (который будет работать) отличается от вашего, заключается в том, что он использует TODAY (то есть YEAR TO DAY) вместо CURRENT (то есть YEAR TO FRACTION), но YEAR(CURRENT) и YEAR(TODAY) получит тот же результат.

Единственный способ получить другой результат: если у вас есть CURRENT внутри SUM, например SUM(CURRENT-start_date). Таким образом, у вас будет больше точности, чем только дни (вы получите дни, а затем hh: mm: ss.fff), как вы хотите, но если вы использовали TODAY, вы получите только дни.

Кроме этого, все в порядке.

Смежные вопросы