powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Группировка в Select'е и условие выборки
10 сообщений из 10, страница 1 из 1
Группировка в Select'е и условие выборки
    #33020829
Владимиr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток!

Ни как не могу решить следующую проблему, как с помощью одного или нескольких select`тов организовать следующую выборку:

Имеется таблица:

num date field ... ...
-------------------------------
num1, datе1, field1,field2, field3,...
num1, datе2, field1,field2, field3,...
num1, datе3, field1,field2, field3,...
num2, datе1, field1,field2, field3,...
num2, datе3, field1,field2, field3,...
num3, datе1, field1,field2, field3,...
....
num7, dat1, fied1,field2, field3,...

Необходимо выбрать все записи таблицы у которых поле date <= MyDate,
т.е. получить как бы временной срез по дате для 'num'. (Например: последние показания счетчиков абонентов (группировка по num) на конец января).
Естественно в выборке должны быть все поля (datе1, field1,field2, field3,...)
Руками понятно как, а вот Select`ами?
(Про ограничения для GROUP BY и SET ENGINEBEHAVIOR в курсе...)
Помогите, а?
...
Рейтинг: 0 / 0
Группировка в Select'е и условие выборки
    #33020856
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее формулируй вопрос.

ВладимиrНеобходимо выбрать все записи таблицы у которых поле date <= MyDate,
Код: plaintext
1.
MyDate = DATE( 2005 , 1 , 31 )
SELECT * FROM MyTable WHERE date <= m.MyDate

Владимиrпоследние показания счетчиков абонентов (группировка по num) на конец января
А вот это уже совсем другой разговор. Это уже через подзапрос.
...
Рейтинг: 0 / 0
Группировка в Select'е и условие выборки
    #33020907
VadimS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select a.num
   ,a.date
   ,a.field
  ,a.field2
 from table as a
    Inner join 
        ( select num,max(date) as maxdate 
                            from  table where date <= твоядата
                                            group by num) 
        as b
        ON  a.num = b.num 
             and a.date = b.maxdate
...
Рейтинг: 0 / 0
Группировка в Select'е и условие выборки
    #33021227
Владимиr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМТочнее формулируй вопрос.

Это уже через подзапрос.

стараюсь...

SELECT a.num,a.pl_day ,a.sc_ab,a.sc_re,a.kwt,a.rubli ;
FROM TABLE\sceta AS a ;
Inner JOIN ;
(SELECT num,MAX(pl_day) AS maxdate FROM TABLE\sceta WHERE pl_day <= {^2004-02-01} GROUP BY num) as b ;
ON a.num = b.num AND a.pl_day = b.maxdate

ругается на синтаксис... что не так?
...
Рейтинг: 0 / 0
Группировка в Select'е и условие выборки
    #33021283
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, так Вы ведь не указали версию FoxPro. А приведенный синтаксис пройдет только в VFP9.

Если у Вас младшая версия FoxPro, то надо сделать 2 последовательных запроса. Результат подзапроса выгрузить во временную таблицу (курсор), а потом сделать запрос с ним в качестве источника.
...
Рейтинг: 0 / 0
Группировка в Select'е и условие выборки
    #33021350
Владимиr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромное!
Действительно пробывал в 7-ке не прошло, в 9-ке все ОК, разбил на два заработало и в 7-ке...
Еще раз спасибо.
...
Рейтинг: 0 / 0
Группировка в Select'е и условие выборки
    #33023135
Почему-то все забывают про такой полезный элемент языка SQL в VFP, как HAVING...
Код: plaintext
1.
2.
3.
4.
5.
SELECT a.num,a.pl_day ,a.sc_ab,a.sc_re,a.kwt,a.rubli ;
FROM TABLE\sceta AS a ;
where pl_day <= {^ 2004 - 02 - 01 } ;
group by a.num ;
having a.num = max(a.num)
...
Рейтинг: 0 / 0
Группировка в Select'е и условие выборки
    #33023525
Владимиr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Так даже быстрее...
Интересно при одинаковых датах какая запись попадет в выборку? Та котороя физически была добавленна последней?
...
Рейтинг: 0 / 0
Группировка в Select'е и условие выборки
    #33023605
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МаликовПочему-то все забывают про такой полезный элемент языка SQL в VFP, как HAVING...
ВладимиrИнтересно при одинаковых датах какая запись попадет в выборку? Та котороя физически была добавленна последней?
Это одна из причин, по которой "забывают".

Ну, а другая - а при чем здесь HAVING? Особенно в приведенном синтаксисе

Код: plaintext
1.
2.
3.
SELECT ...
group by a.num ;
having a.num = max(a.num)
ЧТО должно проконтролировать такое условие? В пределах одной группы по полю a.num все значения этого поля одинаковые. Т.е. MAX(a.num) всегда будет равен a.num

Код: plaintext
1.
2.
3.
4.
5.
create cursor tt (t1 I, t2 I)
insert into tt values ( 1 , 1 )
insert into tt values ( 1 , 2 )
insert into tt values ( 2 , 3 )
insert into tt values ( 2 , 4 )
select t1,t2 from tt group by t1 having t1=max(t1)
Теоретически, имел бы смысл следующий запрос

Код: plaintext
1.
2.
3.
4.
SELECT a.num,a.pl_day ,a.sc_ab,a.sc_re,a.kwt,a.rubli ;
FROM TABLE\sceta AS a ;
where pl_day <= {^ 2004 - 02 - 01 } ;
group by a.num ;
having a.pl_day = max(a.pl_day )
Т.е. группировка по полю a.num, а HAVING по полю a.pl_day

НО!!! Такой запрос очень сильно зависит от порядка следования записей .

Код: plaintext
1.
2.
3.
4.
5.
create cursor tt (t1 I, t2 I)
insert into tt values ( 1 , 2 )
insert into tt values ( 1 , 1 )
insert into tt values ( 2 , 10 )
insert into tt values ( 2 , 9 )
select t1,t2 from tt group by t1 having t2=max(t2)
В результате, в запрос не попало вообще ничего! Почему? Да потому, что в пределах одной группы берется значения из последней записи, а они не равны максимальному значению.

Именно поэтому, подобные запросы и НЕ используются.
...
Рейтинг: 0 / 0
Группировка в Select'е и условие выборки
    #33024527
понял, отстал... ;)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Группировка в Select'е и условие выборки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]