Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Аналогия TOP 1   Найти похожие ветки 

 
savv   (2005-05-20 08:54) [0]

Здравствуйте все у меня вопрос:
Как в Paradox выбрать первую запись.


 
Anatoly Podgoretsky ©   (2005-05-20 08:58) [1]

.First


 
Max Zyuzin ©   (2005-05-20 09:23) [2]

>savv   (20.05.05 08:54)  
АФАИК никак. Выбрать только усе, п потом сходить к первой.


 
Виталий Панасенко   (2005-05-20 10:06) [3]

АДО такое умеет.. И с парадоксом - тоже


 
savv   (2005-05-20 10:09) [4]

А в SQL никак ? Мне нужно выбрать те записи значение некоторых полей встречаются чаще всех. Вот мой запрос:
SELECT Count(*),  patent.TabNom
FROM         PATENT INNER JOIN
                     OBJECT ON PATENT.KODOBJECT = OBJECT.KODOBJECT INNER JOIN
                     DOCUMENT ON PATENT.NOMDOK = DOCUMENT.NOMDOK INNER JOIN
                     VLADELEC ON PATENT.TABNOM = VLADELEC.TABNOM
group by patent.TabNom
order by patent.TabNom desc


 
Nikolay M. ©   (2005-05-20 10:18) [5]


> Виталий Панасенко   (20.05.05 10:06) [3]
> АДО такое умеет.. И с парадоксом - тоже

АДО, видимо, какими-то иными способами работает, астральными...


> savv   (20.05.05 10:09) [4]
> А в SQL никак ?


добавить в WHERE нечто вроде

...
WHERE
 PATENT.TabNom = (SELECT MAX (patent2.TabNom) FROM         PATENT patent2 INNER JOIN
                    OBJECT ON PATENT.KODOBJECT = OBJECT.KODOBJECT INNER JOIN
                    DOCUMENT ON PATENT.NOMDOK = DOCUMENT.NOMDOK INNER JOIN
                    VLADELEC ON PATENT.TABNOM = VLADELEC.TABNOM
)


либо добавить в FROM еще одну таблицу

...
FROM
 PATENT patent2


связать ее с остальными таблицами аналогично PATENT и добавить

HAVING
 PATENT.TabNom = MAX (patent2.TabNom)


 
Nikolay M. ©   (2005-05-20 10:19) [6]

Сорри, ессесно так:

> добавить в WHERE нечто вроде
>
> ...
> WHERE
>  PATENT.TabNom = (SELECT MAX (patent2.TabNom) FROM      
>    PATENT patent2 INNER JOIN
>                     OBJECT ON patent2.KODOBJECT = OBJECT.KODOBJECT
> INNER JOIN
>                     DOCUMENT ON patent2.NOMDOK = DOCUMENT.NOMDOK
> INNER JOIN
>                     VLADELEC ON patent2.TABNOM = VLADELEC.TABNOM
> )


 
lexer ©   (2005-05-20 10:25) [7]

[6] Nikolay M. ©   (20.05.05 10:19)
???
и что по вашему достанет этот запрос?
>WHERE
> PATENT.TabNom = ( MAX (patent2.TabNom) ....
уж точно не самые частые записи


 
Виталий Панасенко   (2005-05-20 10:31) [8]


> savv   (20.05.05 10:09) [4]
> А в SQL никак ? Мне нужно выбрать те записи значение некоторых
> полей встречаются чаще всех. Вот мой запрос:
> SELECT Count(*),  patent.TabNom
> FROM         PATENT INNER JOIN
>                      OBJECT ON PATENT.KODOBJECT = OBJECT.KODOBJECT
> INNER JOIN
>                      DOCUMENT ON PATENT.NOMDOK = DOCUMENT.NOMDOK
> INNER JOIN
>                      VLADELEC ON PATENT.TABNOM = VLADELEC.TABNOM
> group by patent.TabNom
> order by patent.TabNom desc

А чем тебя это не устраивает ? Как определить границу того, что это уже не часто встречающиеся ?.. НД перебираешь, и смотришь на нижнюю границу... Разница ?


 
Johnmen ©   (2005-05-20 10:32) [9]

>уж точно не самые частые записи

Кто говорил, что самые частые ? Вроде бы самую первую ?


 
Nikolay M. ©   (2005-05-20 10:32) [10]

[5] и [6] - фтопку.
Ессесно, надо брать максимум не TabNom, а count-а.


 
Nikolay M. ©   (2005-05-20 10:34) [11]


> Johnmen ©   (20.05.05 10:32) [9]
> Кто говорил, что самые частые ? Вроде бы самую первую ?

Автор в [4] сказал. Это я поторопился, потому что увидел у него в запросе order by patent.TabNom desc.


 
Max Zyuzin ©   (2005-05-20 10:35) [12]

>Johnmen ©   (20.05.05 10:32) [9]
Жень посмотри внимательно на savv   (20.05.05 10:09) [4]
Он как раз и выберает количество потом сортирует,  - первая запись самая частая и выходит.


 
lexer ©   (2005-05-20 10:36) [13]

[10] Nikolay M. ©   (20.05.05 10:32)
>максимум не TabNom, а count-а.
согласен, одним запросом ИМХО это не реализовать, надо делать или предсталение/процедурку, из которых брать макс, или доставать все записи в приложение и там отбирать.


 
Johnmen ©   (2005-05-20 10:36) [14]

Хм... Вот в [0] он тоже сказал ключевую фразу "Как в Paradox выбрать первую запись."


 
Johnmen ©   (2005-05-20 10:38) [15]

>Max Zyuzin ©   (20.05.05 10:35) [12]

Не, первая не самая частая. Вот так будет самая:
ORDER BY 1 DESC


 
Max Zyuzin ©   (2005-05-20 10:43) [16]

>Johnmen ©   (20.05.05 10:38) [15]
Да согласен сам недосмотрел. Но смысл был ясен...


 
Nikolay M. ©   (2005-05-20 10:50) [17]


> Johnmen ©   (20.05.05 10:38) [15]
> Не, первая не самая частая. Вот так будет самая:
> ORDER BY 1 DESC

Угу. Конечно, тут имеется разногласие с запросом в [0] и пожеланием в [4]. Но, имхо, ему нужен максимум все-таки по count.


> lexer ©   (20.05.05 10:36) [13]
> согласен, одним запросом ИМХО это не реализовать, надо делать
> или предсталение/процедурку, из которых брать макс, или
> доставать все записи в приложение и там отбирать.

Если в парадоксе прокатит конструкция
FROM
 SELECT MAX (q.cnt) FROM (SELECT count(*) AS cnt, TabNom FROM...) q
то можно и одним запросом обойтись


 
savv   (2005-05-20 10:53) [18]

>Если в парадоксе прокатит конструкция
>FROM
> SELECT MAX (q.cnt) FROM (SELECT count(*) AS cnt, TabNom >FROM...) q
>то можно и одним запросом обойтись

В том то и дело что не катит такая конструкция


 
lexer ©   (2005-05-20 10:55) [19]

[17] Nikolay M. ©   (20.05.05 10:50)
а где она всё-таки "прокатит"?


 
Nikolay M. ©   (2005-05-20 11:15) [20]


> lexer ©   (20.05.05 10:55) [19]
> а где она всё-таки "прокатит"?

MS SQL.


 
Nikolay M. ©   (2005-05-20 11:25) [21]

Кстати, вот так по теории будут выбираться самые частые записи. Но SQL Explorer на базе DBDEMOS дает AV :(

SELECT count(*), c.city
FROM clients c
GROUP BY c.city
HAVING count(c.city) >= ALL (SELECT count(c2.city) FROM clients c2 GROUP BY c2.city)


 
savv   (2005-05-20 13:32) [22]

Значит нет способа ?


 
Nikolay M. ©   (2005-05-20 13:37) [23]


> savv   (20.05.05 13:32) [22]
> Значит нет способа ?

[21] попробуй под свой запрос переделать.


 
savv   (2005-05-20 13:43) [24]

Попробовал:
SELECT Count(*),  q1.TabNom
FROM         PATENT INNER JOIN
                     OBJECT ON PATENT.KODOBJECT = OBJECT.KODOBJECT INNER JOIN
                     DOCUMENT ON PATENT.NOMDOK = DOCUMENT.NOMDOK INNER JOIN
                     VLADELEC ON PATENT.TABNOM = VLADELEC.TABNOM q1
group by q1.TabNom
HAVING count(q1.TabNom) >= ALL (SELECT count(q2.TabNom) FROM PATENT INNER JOIN
                                             OBJECT ON PATENT.KODOBJECT = OBJECT.KODOBJECT INNER JOIN
                                            DOCUMENT ON PATENT.NOMDOK = DOCUMENT.NOMDOK INNER JOIN
                                           VLADELEC ON PATENT.TABNOM = VLADELEC.TABNOM q2
                                           GROUP BY q2.TabNom)

Не выходит, он не понимает формальные имена q1, q2


 
Nikolay M. ©   (2005-05-20 13:46) [25]


> q1, q2

Что за бред?


 
savv   (2005-05-20 14:00) [26]

>> q1, q2

>Что за бред?

тоже что и c2, c


 
Max Zyuzin ©   (2005-05-20 14:04) [27]

>savv   (20.05.05 14:00) [26]
Внимательно посмотри на Nikolay M. ©   (20.05.05 11:25) [21]
И найди 10 отличий в использовании...


 
savv   (2005-05-20 14:22) [28]

>Max Zyuzin [27]

Что ты имеешь в виду ?


 
Max Zyuzin ©   (2005-05-20 14:29) [29]

SELECT Count(*),  q1.TabNom
FROM         PATENT INNER JOIN
                    OBJECT ON PATENT.KODOBJECT = OBJECT.KODOBJECT INNER JOIN
                    DOCUMENT ON PATENT.NOMDOK = DOCUMENT.NOMDOK INNER JOIN
                    VLADELEC q1 ON PATENT.TABNOM = q1.TABNOM
group by q1.TabNom
HAVING count(q1.TabNom) >= ALL (SELECT count(q2.TabNom) FROM PATENT INNER JOIN
                                            OBJECT ON PATENT.KODOBJECT = OBJECT.KODOBJECT INNER JOIN
                                           DOCUMENT ON PATENT.NOMDOK = DOCUMENT.NOMDOK INNER JOIN
                                          VLADELEC q2 ON PATENT.TABNOM = q2.TABNOM                                           GROUP BY q2.TabNom)

Если я нигде не ошибся


 
savv   (2005-05-20 14:37) [30]

>Max Zyuzin [29]

Может быть ты и прав, но он все равно не работает


 
Johnmen ©   (2005-05-20 15:13) [31]

Он работает, но скрытно, незаметно для тебя.
:))))))))))))


 
savv   (2005-05-20 15:32) [32]

>Johnmen [31]
>Он работает, но скрытно, незаметно для тебя.
>:))))))))))))

Это уж точно :)
Интересно как же его раскрыть?


 
Johnmen ©   (2005-05-20 15:40) [33]

>savv   (20.05.05 15:32) [32]

Шутка. Предикаты ALL, ANY, SOME и т.д. не поддерживаются.
Так что на [29] не рассчитывай.


 
Max Zyuzin ©   (2005-05-20 16:18) [34]

Гм... :) Короче боролись, боролись... в общем я кроме как сделать выборку а потом сходить на первую запись вариянтов невижу :)


 
savv   (2005-05-20 16:29) [35]

Max Zyuzin [34]
> сходить на первую запись


Возможно ;)



Страницы: 1 вся ветка

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.028 c
3-1116490231
msguns
2005-05-19 12:10
2005.06.29
Как задать регистр в ACCESS


5-1088065170
nejest
2004-06-24 12:19
2005.06.29
Проблема с переменными в классе.


4-1115476321
GrayFace
2005-05-07 18:32
2005.06.29
Глюки в статье "Hooks"


14-1117299874
Рулон Обоев
2005-05-28 21:04
2005.06.29
batch file


14-1117696261
Nik8.
2005-06-02 11:11
2005.06.29
Загадка - Два брата