2010-08-28 5 views
1

я одну таблицу с двумя столбцами, как показано на рисункерассчитать общее количество дней в specied даты

alt text

столбцов таблицы имена (MaxDate, СУММА).

, если вы видите, что мы имеем

first date range (from current date to 20-jan-2010) 
    second date range from 20-jan-2010 to 30-jan-2010 
    3rd range is from 20-jan-2010 to 31-jan-2010. 

при выполнении пользователем страницы введите начальную и конечную дату.

, например, если пользователь поставил

 start date: 18-jan-2010 
     end date: 23-jan-2010 

тогда он имеет 2 даты в первых вариантах и ​​3 даты в опциях второго.

, что я хочу, чтобы вычислить в SQL

1. how many days in first range (if any this depends on supplied dates from user) 
2. how many days in 2nd range (if any this depends on supplied dates from user) 
3. how many days in 3rd range (if any this depends on supplied dates from user) 

Благодарности

+0

Вы должны рассмотреть вопрос об изменении вашей схемы для включения даты начала и окончания, например. (start_date, end_date, amount). –

+0

Я не понимаю часть о пользовательском вводе. Не могли бы вы показать, какие диапазоны вы хотите рассчитать, если принять пример? Благодарю. – Mischa

+0

А я думаю, я понимаю, что вы имеете в виду. В вашем примере первый диапазон составляет от 18 до 20-jan, второй 20-jan до 23-jan, а последний диапазон - 0 дней, правильно? – Mischa

ответ

1

Вот пример того, как рассчитать дни.

http://dev.mysql.com/doc/refman/5.0/en/date-calculations.html

+0

Прямое добавление/вычитание дат работает только в том случае, если вы работаете с изолированными единицами (годами, месяцами в течение того же года или дней в течение того же месяца). 'DAY (date1) -DAY (date2)' не будет работать для этого приложения. Я думаю, вы хотели бы ссылаться на: http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html#function_date-add –

0

Вы можете сделать все это в MySQL:

SELECT DATEDIFF(NOW(), max_date) as days; 
SELECT DATEDIFF(date2, date1) FROM 
    (SELECT max_date as date1 FROM table1 LIMIT 1) as s1 
    JOIN 
    (SELECT max_date as date2 FROM table1 LIMIT 1 OFFSET 1) as s2; 
//etc. 
Смежные вопросы