Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Вниз

Аналогия 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.05 c
14-1117181522
TUser
2005-05-27 12:12
2005.06.29
Уплотнение элементов в памяти


1-1118306575
Koala
2005-06-09 12:42
2005.06.29
В чем ошибка?


3-1116325523
Mortal
2005-05-17 14:25
2005.06.29
ADO: Проблема с Datetime


6-1112208880
Urvin
2005-03-30 22:54
2005.06.29
ICQ посредством Delphi


11-1099554883
DmiSb
2004-11-04 10:54
2005.06.29
MaskEdit в KOL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский