Задавайте вопросы, мы ответим
Вы не зашли.
День добрый!
Имеется таблица:
Date Value
2009-03-03 -1
2009-03-04 -1
2009-03-05 -1
2009-03-06 -1
2009-03-07 -1
2009-03-08 1
2009-03-09 -1
2009-03-10 0
2009-03-11 0
2009-03-12 0
2009-03-13 0
2009-03-14 0
2009-03-15 1
Как посчитать количество отрицательных чисел до первой единицы на определенную дату. Т.е. дата 2009-03-05 3 отр. числа до первой единицы вниз!
Помогите пжл.
Отредактированно rocalimon (17.05.2010 13:01:33)
Неактивен
Если у Вас всегда ровно по 1 строке на день, то
SELECT DATEDIFF(`Date`, '2009-03-05')
FROM tablename
WHERE `Date` >= '2009-03-05' AND VALUE >= 0
LIMIT 1;
Неактивен
Спасибо огромное!!! Все работает!!
Неактивен
Еще вопрос возник. Как сделать тоже самое, но до первой даты вверх??? Т.е. дата на убывание.
Неактивен
Заменить >= на <= ?
Неактивен
Нет так не работает. пробовал. Выдает бред.
Неактивен
Приведите, пожалуйста, пример данных и пример бреда
Неактивен
DATE Value User
'2009-06-03', 5, 123
'2009-06-04', -1, 123
'2009-06-05', -1, 123
'2009-06-06', -2, 123
'2009-06-07', -3, 123
'2009-06-03', 160, 124
'2009-06-04', -10, 124
'2009-06-05', -130, 124
'2009-06-06', -130, 124
'2009-06-07', -130, 124
Задача состоит в том чтобы посчитать количество дней с отрицательным значением VALUE с 2009-06-06 до первого положительного значения в прошлом, с группировкой по пользователю.
SELECT DATEDIFF('2009-06-06',`Date`) as kol, user
FROM tablename
WHERE `Date` <= '2009-03-06' AND VALUE >= 0
group by user
результат:
date user
4 123
4 124
Хотя должно быть по 3.
Если делать без группировки и только на одного пользователя 123, результат:
4
3
Т.е. правильное значение оказывается внизу.
Неактивен
С группировкой, очевидно, работать не будет, т.к. LIMIT 1 всё же нужен.
и ORDER BY `DATE` нужно добавить, как-то я его пропустил
А для разных пользователей проще всего сделать через подзапросы.
Неактивен