Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 320
1

Почему в delphi не работает SQL-зарос с параметром limit?

08.05.2014, 01:17. Просмотров 1086. Ответов 13
Метки нет (Все метки)

Подскажите пожалуйста, почему выдает ошибку синтаксиса вот такой синтаксис?:
SQL
1
SELECT * FROM счет LIMIT 4
0
Миниатюры
Почему в delphi не работает SQL-зарос с параметром limit?  
Вложения
Тип файла: rar Primer.rar (327.2 Кб, 16 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2014, 01:17
Ответы с готовыми решениями:

Не работает запрос суммы с параметром SQL
Доброго времени суток! Пишу запрос if (RadioGroup4.ItemIndex=1) then ...

SQL-запрос в Delphi и в Access один и тот же, но в Delphi не работает
ри обращение к базе в Access я использую код: with ADOQueryMain do begin...

SQL-запрос работает в Access, а в Delphi не работает :'(
Две связанные таблицы 1к1. Вводим данные в поле одной таблицы и во второй...

Почему не работает в Delphi 2009
Добрый вечер. Данный код сохраняет картинку с web-сайта в файл. Он...

Не работает параметрический запрос(SQL)(Delphi)
Здравствуй, у меня возникла проблема. Пытаюсь сделать параметрический запрос но...

13
Скандербег
939 / 895 / 297
Регистрация: 07.08.2012
Сообщений: 2,496
08.05.2014, 07:22 2
Язык Microsoft Access SQL не поддерживает предложение LIMIT.
Для ограничения строк, возвращаемых запросом нужно применять TOP nn
SQL
1
SELECT TOP 4 * FROM счет
0
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 320
08.05.2014, 11:23  [ТС] 3
Цитата Сообщение от Скандербег Посмотреть сообщение
Язык Microsoft Access SQL не поддерживает предложение LIMIT.
Для ограничения строк, возвращаемых запросом нужно применять TOP nn
Код SQL
1
SELECT TOP 4 * FROM счет
А что вы можете посоветовать? Задача звучит так: Нужно из четырех последних записей, выбрать наибольшие или наименьшие значение столбца определенного поля, как это сделать?

Добавлено через 8 минут
Цитата Сообщение от Скандербег Посмотреть сообщение
Язык Microsoft Access SQL не поддерживает предложение LIMIT.
Для ограничения строк, возвращаемых запросом нужно применять TOP nn
Код SQL
1
SELECT TOP 4 * FROM счет
И TOP - это не ограничение количество выводимых записей, а перемещение по строкам, если написать ТОР 4 то, попадем на четвертую строку.
0
Скандербег
939 / 895 / 297
Регистрация: 07.08.2012
Сообщений: 2,496
08.05.2014, 11:29 4
Задача, если она предназначена для SQL СУБД поставлена не корректно:
В условии должно быть обязательно оговорен критерий "последние записи" по отношению к чему?.
0
FIL
Модератор
3422 / 2556 / 728
Регистрация: 19.09.2012
Сообщений: 7,926
08.05.2014, 11:29 5
Цитата Сообщение от DDim1000 Посмотреть сообщение
если написать ТОР 4 то, попадем на четвертую строку.
А если справку почитать?
0
Скандербег
939 / 895 / 297
Регистрация: 07.08.2012
Сообщений: 2,496
08.05.2014, 11:31 6
И TOP - это не ограничение количество выводимых записей, а перемещение по строкам, если написать ТОР 4 то, попадем на четвертую строку.
Не советую придумывать возможностей SQL, которых не существует.
0
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 320
08.05.2014, 13:41  [ТС] 7
Цитата Сообщение от Скандербег Посмотреть сообщение
Задача, если она предназначена для SQL СУБД поставлена не корректно:
В условии должно быть обязательно оговорен критерий "последние записи" по отношению к чему?.
Условие задачи: Есть цена некого товар, и эта цена заносятся в базу один раз в месяц, и эта цена каждый раз разная. Нужно узнать разницу между максимальной и минимальной ценой за четыре месяца, 1 месяц - одна цена. Но, проблема вот в чем, цена может быть в 1-й месяц максимальной, а в третий месяц - минимальной. А может и наоборот, в первый месяц минимальной, а в третий максимальной. Также могут быть и другие сочетания. например, 1-й месяц: 5000; 2-й месяц: 11000; 3-й месяц 4000; 4-й месяц 7000;.... 8-й месяц 3000. Как узнать разницу между максимальной ценой за четыре месяца, если в таблице содержится более 10 записей?
0
Скандербег
939 / 895 / 297
Регистрация: 07.08.2012
Сообщений: 2,496
08.05.2014, 14:04 8
Если речь идет о последних четырех месяцах (опять же и в более развернутом условии не сказано, что это
последние четыре месяца, но допустим, что это последние), то запрос, который возвращает четыре записи
за последние месяцы может выглядеть так:
SQL
1
SELECT top 4 * FROM счет ORDER BY [месяц] DESC
Вместо [месяц] надо вписать имя поля из своей таблицы.
Смысл запроса в том, что сервер сортирует выборку по датам (месяцы - можно надеяться, в таблице объявлены типом дата/время?) в убывающем порядке.
Так что, записи с последними месяцами "всплывают" наверх. Затем из этих записей отсекаются четыре первых.
0
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 320
08.05.2014, 15:31  [ТС] 9
Цитата Сообщение от Скандербег Посмотреть сообщение
Код SQL
....
SELECT top 4 * FROM счет ORDER BY [месяц] DESC
Вместо [месяц] надо вписать имя поля из своей таблицы.
Смысл запроса в том, что сервер сортирует выборку по датам (месяцы - можно надеяться, в таблице объявлены типом дата/время?) в убывающем порядке.
Так что, записи с последними месяцами "всплывают" наверх. Затем из этих записей отсекаются четыре первых.
Почему-то c ORDER BY выдает ошибку. Вот такой запрос:
SQL
1
SELECT top 4  MAX(цена) FROM счет ORDER BY Дата DESC
Ошибка:
0
Миниатюры
Почему в delphi не работает SQL-зарос с параметром limit?  
northener
пофигист широкого профиля
3427 / 2326 / 631
Регистрация: 15.07.2013
Сообщений: 13,778
08.05.2014, 15:45 10
Цитата Сообщение от DDim1000 Посмотреть сообщение
Почему-то c ORDER BY выдает ошибку
Там же всё на русском. Неужели непонятно?
0
Скандербег
939 / 895 / 297
Регистрация: 07.08.2012
Сообщений: 2,496
08.05.2014, 15:53 11
Функцию MAX в этой конструкции запроса использовать нельзя.
Несложно в программе пройтись по полученному результату из четырех записей и получить максимальную цену
0
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 320
08.05.2014, 17:24  [ТС] 12
Цитата Сообщение от northener Посмотреть сообщение
Там же всё на русском. Неужели непонятно?
Нет, не понятно. Мне не понятно, что значит не включает выражение...

Добавлено через 5 минут
Цитата Сообщение от Скандербег Посмотреть сообщение
Функцию MAX в этой конструкции запроса использовать нельзя.
Несложно в программе пройтись по полученному результату из четырех записей и получить максимальную цену
А как можно пройтись по полученному результату?
0
Скандербег
939 / 895 / 297
Регистрация: 07.08.2012
Сообщений: 2,496
08.05.2014, 17:46 13
Вот запрос, который должен вернуть то что нужно:
SQL
1
SELECT MAX(цена) FROM (SELECT top 4 * FROM счет ORDER BY Дата DESC)
1
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 320
08.05.2014, 18:32  [ТС] 14
Цитата Сообщение от northener Посмотреть сообщение
Там же всё на русском. Неужели непонятно?
Нет, не понял... Я не могу понять, что значит? - ...не включает... как часть синтаксиса. И почему не включает?

Добавлено через 7 минут
Цитата Сообщение от Скандербег Посмотреть сообщение
Вот запрос, который должен вернуть то что нужно:
Код SQL
1
SELECT MAX(цена) FROM (SELECT top 4 * FROM счет ORDER BY Дата DESC)
Все, работает! Спасибо большое!
0
08.05.2014, 18:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2014, 18:32

Работает ли ADO для Delphi 7 MS SQL 2014
При попытке подключиться к базе данных на MS SQL 2014 через ADOConnection...

Ошибка SQL запроса , в базе работает, а через IBQuery в Delphi ошибка
В Combobox загружены имена организаций. Нужно выполнить запрос на вывод всех...

SQL запрс с параметром!
я пишу в delphi7 SQL запрос, мне надо менять имя таблицы из которой идет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru