Форум: "Базы";
Текущий архив: 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