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

Вниз

SQL (Delphi) -запрос   Найти похожие ветки 

 
Chery   (2002-12-06 11:18) [0]

Как выбрать в SQL -запросе определйнные по счёту записи из таблицы (Interbase). Например: первые 5, последние 5, через одну...?
Спасибо.


 
ЮЮ   (2002-12-06 11:37) [1]

Так извращаться можно только в хранимых процедурах :-)
Ну что это за критерий выбора: "все равно что, но через одну" ?


 
Reindeer Moss Eater   (2002-12-06 11:39) [2]

Записи могут выбираться только на основании значений полей таблицы. Понятия "первые 5", "последние 5" и пр. имеют смысл только на клиенте, когда запрос уже отработал и вернул набор данных.


 
Johnmen   (2002-12-06 13:13) [3]

>ЮЮ © (06.12.02 11:37)

Не только...Зависит от типа БД, который автор не счел нужным указать...Но извращение - однозначно ! :)))


 
Chery   (2002-12-06 14:52) [4]

База Interbase (не помню кокой именно стандарт), но это всё фигня. Нужен сам пример кода SQL - запроса. (Хотя бы любой тип SQL).
То что изврат сам знаю.
Но допустим в базу постоянно вносятся записи, содержащие инфу о каких-то обновлениях, тогда достаточно просмотреть к примеру последних пять(не зависимо от даты ввода)
чтоб догнать чё к чему.

Меня интересует можно ли в SQL работать с Count как в Delphi (с таблицами).


 
Johnmen   (2002-12-06 16:29) [5]

Чтобы это не было извратом, добавь поле Date и заполняй его текущим значением в триггере. Затем выбирай с ORDER BY ... DESC, и в приложении смотри первые N.
Есть другие варианты, но они громоздки...


 
OlegE   (2002-12-06 16:36) [6]

Не помню синтаксис для InterBase, а для FB или Yaffil:
select first 5 * from ...


 
OlegE   (2002-12-06 16:41) [7]

Дополнение
SELECT [FIRST (<integer expr m>)] [SKIP (<integer expr n>)]
Retrieves the first m rows of the selected output set. The optional SKIP clause will cause the first n
rows to be discarded and return an output set of m rows starting at n + 1. In the simplest form, m
and n are integers but any Firebird expression that evaluates to an integer is valid. A identifier that
evaluates to an integer may also be used in GDML, although not in SQL or DSQL.
Parentheses are required for expression arguments and optional otherwise.
They can also bind variables, e.g. SKIP ? * FROM ATABLE returns the remaining dataset after discarding
the n rows at the top, where n is passed in the "?" variable. SELECT FIRST ? COLUMNA, COLUMNB FROM
ATABLE returns the first m rows and discards the rest.
The FIRST clause is also optional, i.e. you can include SKIP in a statement without FIRST to get an
output set that simply excludes the rows appointed to SKIP.
Available in SQL and DSQL except where otherwise indicated.
Examples:
SELECT SKIP (5+3*5) * FROM MYTABLE;
SELECT FIRST (4-2) SKIP ? * FROM MYTABLE;
SELECT FIRST 5 DISTINCT FIELD FROM MYTABLE;


 
Smashich   (2002-12-06 16:51) [8]

> База Interbase (не помню кокой именно стандарт), но это всё фигня. Нужен сам пример кода SQL - запроса. (Хотя бы любой тип SQL).
не фигня поскольку то, что ты хочеш можна получить используя ХП, а их синтаксис отличается будь здоров для разных СУБД
если те нужна просто идея как это сделать

то первые n записей :
для IB/FB - select FIRST N from
(в MSSQL - select TOP N, в mySQL - select LIMIT...)

для последних n записей
для IB/FB - ХП
i=0;
SELECT Count(id) FROM myTable INTO :Count DO
FOR SELECT id FROM myTable INTO :id DO
BEGIN
IF ((i>=Count-N) THEN
SUSPEND;
i=i+1;
END
(в в mySQL - select LIMIT...;)

для чере одну хочешь чет нечет проверяй у номера записи; но это все в ХП надо делать!



 
Сергєєв Володимир   (2002-12-08 18:13) [9]

У меня была когда-то подобная хрень - требовалось построить отчеты по последним двум квитанциям. Но у меня было следующее:
В таблице "Накладные" было ключевое поле "ID", и триггер

ACTIVE BEFORE INSERT POSITION 0 AS
BEGIN
NEW.ID = GEN_ID (GENERATOR_NAS, 1);
END;

Таким образом, у меня было автоинкрементное ключевое поле, поэтому я точно знал, что последние записи имеют максимальное значение этого поля. А тогда становиться все просто

SELECT
MAX(ID)
FROM
NAS
INTO
:TEMP_ID;
и в переменную TEMP_ID - я получаю номер последней накладной. Дальше его простая арифметика. В данной ситуации для получения значения первого поля можно вместо MAX() использовать MIN().

Если тебе это подойдет, конечно.



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

Форум: "Базы";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.033 c
1-85997
harismatik
2002-12-16 11:52
2002.12.26
Выбор узла в TTreeView


3-85819
newe
2002-12-06 09:19
2002.12.26
Как мне узнать количество строчек в DBGrid е?


1-85912
OlDemon
2002-12-16 14:55
2002.12.26
Диалог


4-86216
NF
2002-11-08 14:39
2002.12.26
Как узнать имя приложения?


14-86094
KA_
2002-12-05 09:26
2002.12.26
Лог сервера Interbase





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский