Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка дат из таблицы с условием 
V
    Опции темы
UnknownCoder
Дата 3.12.2007, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.8.2007

Репутация: нет
Всего: нет



Господа, добрый день. 
Есть таблица datetable
Ее структура проста
SomeId int not null,
SomeDate date default "00-00-0000"
Пример
5 2007-12-03

Задача
Выбрать такие SomeId у которых ВСЕ даты больше текущей на один день, и выбрать вместе с SomeId минимальную из этих дат. И важно что бы не выбирались те SomeId у которых хотя бы одна дата == текущей, или меньше текущей. Очень прошу вас помоч, голова уже пухнет, а выхода не могу найти.

Заранее благодарен, Алексей.
PM MAIL   Вверх
skyboy
Дата 3.12.2007, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Код

SELECT `someId`,min(`SomeDate`)
FROM `dateTable`
GROUP BY `someId`
HAVING datediff(NOW(),min(`someDate`))< -1

PM MAIL   Вверх
UnknownCoder
Дата 4.12.2007, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.8.2007

Репутация: нет
Всего: нет



Спасибо Вам за ответ, skyboy, но к сожаленью не работает. Тестировал на таких данных
SomeId | SomeDate
1 | 2007-12-07
1 | 2007-12-06
1 | 2007-12-05
1 | 2007-12-04
PM MAIL   Вверх
skyboy
Дата 4.12.2007, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



а так:
Код

SELECT `someId`,min(`SomeDate`)
FROM `dateTable`
GROUP BY `someId`
HAVING datediff(CURRENT_DATE(),min(`someDate`))< -1

PM MAIL   Вверх
soloweb
Дата 4.12.2007, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Georgian
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 30.10.2006

Репутация: нет
Всего: нет



Код

SELECT SomeId, min(SomeDate) as date FROM `dateTable` 
WHERE SomeDate>=(now()+interval 1 day) 
group by SomeId


Попоробуй так!
PM MAIL WWW ICQ   Вверх
UnknownCoder
Дата 4.12.2007, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.8.2007

Репутация: нет
Всего: нет



skyboy, к сожаленью тоже нет :(
PM MAIL   Вверх
skyboy
Дата 4.12.2007, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



данные:
Цитата

1    2007-12-07
1       2007-12-08
1  2007-12-12
2  2007-12-01
2  2007-12-10
2  2007-12-15
3  2007-12-20

результат:
Цитата

1    2007-12-07
3  2007-12-20

данные:
Цитата

1    2007-12-04
1       2007-12-05
1  2007-12-09
2  2007-12-05
2  2007-12-15
3  2007-12-20

результат:
Цитата

3    2007-12-20

Что не так?

Добавлено через 14 секунд
на каких тестовых данных не работает?

PM MAIL   Вверх
UnknownCoder
Дата 4.12.2007, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.8.2007

Репутация: нет
Всего: нет



skyboy, ага. С Вашим запросом работает только когда минимальная дата отличается на 2 дня. Тоесть если сегодня 4-тое число, то работает только тогда когда минимальная дата в таблице 6-тое. А если поставить не -1 а 0, то тогда работает и в моем случае. Огромное Вам спасибо.
PM MAIL   Вверх
skyboy
Дата 4.12.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



soloweb, чтоб не думал, что тебя игнорируют: твой запрос сначала отбросит все "старые" даты, потом выберет минимальную дату для каждого someid. Таким образом, если для someId не все даты были равны/меньше текущей, а была хотя бы одна - больше текущей, то она и будет выведена и вообще someId будет обрабатываться. 
т.е. на наборе
Цитата

1  2007-12-04
1  2007-12-05
1  2007-12-09
2  2007-12-05
2  2007-12-15
3  2007-12-20

если текущее число - 2007-12-04 будет результат
Цитата

1  2007-12-09
2  2007-12-15
3  2007-12-20

в то время, как автору надо было бы получить
Цитата

3  2007-12-20

UnknownCoder, ну, и прекрасно. Хотя мне казалось, что как раз с "-1" должно работать.
------------
Если вопрос решен - помечаем его решенным(вверху справа над первым постом в теме).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0736 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.