Вывести строку с минимальным временем из таблицы по условию SQL
мне нужно вывести одну строку с самым ранним временем, а выходят все равно все 4 строки, что я делаю не так?
select N_KDK, DATE_IN, MIN(TIME_IN) as min, PR_EXIT, KZEP_IN from ZTAE_ where N_KDK = 3376 AND DATE_IN = '01.21.2020' group by N_KDK, DATE_IN, TIME_IN, PR_EXIT, KZEP_IN
Отслеживать
47.8k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 15 мар 2021 в 5:40
thegamestarted thegamestarted
15 6 6 бронзовых знаков
время лучше хранить unix формате тогда будет проще с ним работать в запросах
15 мар 2021 в 6:11
ORDER BY min ASC LIMIT 1
15 мар 2021 в 6:14
Зачем вам группировки?
15 мар 2021 в 6:18
@CrazyElf если не задаю группировку то выдает ошибку Column ‘ZTAE_.N_KDK’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
15 мар 2021 в 6:21
@thegamestarted Если вам нужна просто одна запись, то делаете select всех полей без всяких аггрегатных функций from . where . order by TIME_IN ASC и всё. А вот как ограничить одной записью — это зависит от базы. В MS SQL это будет SELECT TOP 1 и далее остальной запрос. В MySql будет через LIMIT. Какая у вас база? Лучше прямо меткой укажите. SQL не универсален, детали зависят от конкретной БД.
Вывести все строки с данными
Подключаюсь к базе данных MS SQL, есть доступ ко всем таблицам «sa».
На первой базе командой:
use base1; SELECT * FROM tableName — получаю все строки и их значения.
На второй базе таким же запросом ничего не вижу, в ответ пустота. Я знаю что там есть одна таблица с двумя колонками (выяснил другими запросами), данные типа — TEXT. Когда обращаюсь к одной из строк таблицы — пишет «нет такой».
Скажите пожалуйста, почему я могу не видеть эти данные, или как еще можно запросить вывести их на экран.
Спасибо.
Добавлено через 24 минуты
Изменю вопрос.
Какой командой через консоль я смогу прочитать/вывести значения TEXT из таблицы.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Вывести все введенные строки. Отсортировать строки. Вывести самую длинную строку
Здравствуйте. Помогите пожалуйста, не могу разобраться с программой. Ввести с клавиатуры строки.
Вывести все возможные значения из столбика с повторяющимися данными
Добрый день! Будьте добры, подскажите пожалуйста как из столбца, содержащего повторяющиеся значения.

Вывести все целые числа, расположенные между данными числами
Очень прошу помогите пожалуйста 33. Даны два целых числа a и b (a<b). Вывести все целые числа.

Вывести все целые числа, расположенные между данными числами
17 Даны два целых числа A и B (A меньше B). Вывести все целые числа, расположенные между данными.
185 / 179 / 28
Регистрация: 26.05.2011
Сообщений: 854
1. У вас есть права на вторую базу?
2. В объект експлорере попробуйте по таблице щелкнуть правой и там выбрать опен тэйбл, если в таблице что-то есть, там оно есть, если нет, то нет.
3. Если запускаете запрос на выполнение select * from ваша_таблица, и ничего не происходит, то может быть запрос не выполнился и идет выполнение, запросите так: select top 10 * from ваша_таблица, если нет и в этот раз, таблица пуста
674 / 420 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
Я много читал, искал.
Половина не работает, другая выводит не всю информацию.
Доступ к базе должен быть полный, т.к. учетная запись из под которой я подключаюсь -> sa — systemadmin.
Но в колонке требуемой базы данных в разделе GRANTEE указан другой пользователь «user».
Могу работать только через консоль. И посылать запросы SQL на выполнение.
Есть вот какой вопрос. В поле данных DATA_TYPE -> text, может находится не только текст а скажем файл? Как его скачать.
Любые мысли, рад почитать.
Добавлено через 1 час 11 минут
Все, разобрался. Всем спасибо.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Вывести все целые числа, расположенные между данными числами
Даны два целых числа A и B (A < B). Вывести все целые числа, расположенные между данными числами.
Вывести все целые числа, расположенные между данными числами
цикл :Даны два целых числа A и B (A < B). Вывести все целые числа, расположенные между данными.
Вывести все целые числа, расположенные между данными числами
Решать только с использованием repeat! Даны два целых числа A и B (A меньше B). Вывести все.

Вывести все целые числа расположенные между данными числами
даны два целых числа А и B (А>В). Вывести все целые числа расположенные между данными.
Как вывести строки из таблицы так, чтобы они стали столбцами?

Есть таблица PRODUCT_OPTIONS. В этой таблице поля «option» и «value». Опций в таблице более чем 100.
Вопрос: как на PostgreSQL вывести все эти 100 с лишним опций в виде столбцов + так чтобы это было подзапросом на выводе основного запроса?
- Вопрос задан более двух лет назад
- 145 просмотров
SQL-Ex blog

Иногда при работе с очень большими наборами данных вы не захотите получить сразу все данные. В предыдущей статье я рассматривал использование предложение TOP , которое позволяет получить только указанное число строк от начала результирующего набора запроса. Однако если вы захотите просмотреть строки, следующие за этим набором, пейджинг данных позволит вам продолжить прокручивать данные из набора по одной странице за раз. Т.е. вы могли захотеть вывести первые 100 строк, затем другие 100, затем оставшиеся строки и т.д.
В этой статье мы покажем, как выполнить пейджинг по результирующему набору с помощью опций OFFSET и FETCH в предложении ORDER BY.
Тестовые данные
Прежде чем продемонстрировать различные опции пейджинга, я создам тестовые данные с помощью кода в листинге 1.
-- Создаем тестовые данные
USE tempdb;
GO
DROP TABLE IF EXISTS TestData;
GO
CREATE TABLE TestData (
ID INT IDENTITY,
CityName VARCHAR(20),
StateName VARCHAR(20),
Founded SMALLINT);
--Вставка строк тестовых данных
INSERT INTO TestData VALUES
('Seattle','Washington',1851),
('Redmond','Washington',1871),
('Bellevue','Washington',1953),
('Spokane','Washington',1881),
('Tacoma','Washington',1872),
('Portland','Oregon',1851),
('Grants Pass','Oregon',1887),
('Salem','Oregon',1842),
('Bend','Oregon',1905);
Листинг 1: создание тестовых данных
В листинге 1 создается таблица с именем TestData, которая содержит список городов. Эти данные будут использоваться ниже в различных примерах пейджинга. Если вы хотите параллельно выполнять код примеров из этой статьи, то можете создать TestData на вашем тестовом экземпляре SQL Server.
Пейджинг данных в T-SQL
Для обхода страниц данных с применением T-SQL используются опции OFFSET и FETCH предложения ORDER BY. SQL Server начинает возвращать данные с конкретной строки на основе значения OFFSET и возвращает конкретное число строк на основе значения FETCH.
Использование опций OFFSET и FETCH предложения ORDER BY является лучшим выбором для пейджинга, чем курсор на стороне сервера.
Синтаксис OFFSET и FETCH
Ниже приводится синтаксис предложения ORDER BY из документации Microsoft.
ORDER BY order_by_expression
[ COLLATE collation_name ]
[ ASC | DESC ]
[ . n ]
[ ]
::=
<
OFFSET < integer_constant | offset_row_count_expression >
< ROW | ROWS >
[
FETCH < FIRST | NEXT > fetch_row_count_expression > < ROW | ROWS >ONLY
]
>>
Опция является необязательным элементом, который используется в сочетании с предложением ORDER BY для постраничного просмотра набора данных. Он имеет два компонента:
Опция OFFSET определяет число строк в упорядоченном множестве строк, которые пропускаются перед выводимыми строками. Опция FETCH является необязательной и определяет число возвращаемых строк.Если опция FETCH не указывается, возвращаются все строки от местоположения OFFSET и до конца упорядоченного набора.
Для демонстрации работы OFFSET и FETCH давайте рассмотрим несколько примеров.
Использование опции OFFSET
Опция OFFSET предложения ORDER BY используется для определения числа пропускаемых строк в наборе записей перед возвращаемыми строками. Это значение может меняться от 0 до любого числа, вплоть до числа строк в наборе. Если используется нуль (0) никакие строки не пропускаются, как показано при выполнении кода в листинге 2.
SELECT *
FROM TestData
ORDER BY ID
OFFSET 0 ROWS;
Листинг 2: пропускается ноль строк
При выполнении листинга 2 будет получен результат, представленный в отчете 1.

Отчет 1: вывод листинга 2
Как видно при выполнении листинга 2, возвращается каждая строка из таблицы TestData. В листинге 2 нет пропуска строк, поскольку используется значение 0 (нуль) для OFFSET, а опция FETCH отсутствует, поэтому возвращаются все строки из таблицы тестовых данных.
Предположим, что нужно пропустить первые 5 строк на основе значений ID при выборке данных. Для этого может быть выполнен код из листинга 3.
-- Пропущено 5 строк
DECLARE @Skip INT = 5;
SELECT * FROM TestData
ORDER BY ID
OFFSET @Skip ROWS;
Листинг 3: пропуск 5 строк
Теперь код в листинге 3 указывает, что 5 строк должны быть пропущены при использовании переменной вместо константы. При выполнении листинга 3 получен результат, показанный в отчете 2.

Отчет 2: вывод при выполнении листинга 3
Как видно, вывод содержит только те записи, ID которых больше 5, а значением StateName является “Oregon”. Это обусловлено тем, что первые пять строк в таблице TestData по ID были пропущены, после чего остальные тестовые данные были возвращены оператором SELECT.
До сих пор каждый пример демонстрировал только пропуск строк. Если вы хотите ограничить число отображаемых строк, необходимо использовать опцию FETCH.
Использование опции FETCH
Предположим, мы не хотим пропускать строки в результирующем наборе, и вывести только три первых строки данных на основе значений столбца ID. Если таковы требования, то следует выполнить код в листинге 4.
-- Вывести первые 3 строки
DECLARE @Skip INT = 0;
DECLARE @Fetch INT = 3;
SELECT *
FROM TestData
ORDER BY ID
OFFSET @Skip ROWS
FETCH NEXT @Fetch ROWS ONLY;
Листинг 4: вывод первых трех строк
В листинге 4 объявлена еще одна переменная @Fetch, которая определяет число возвращаемых строк. Она установлена в значение 3. При выполнении кода в листинге 4 производится результат, показанный в отчете 3.

Отчет 3: вывод при выполнении кода в листинге 4
Из отчета 3 видно, что пропущено ноль строк, что определяется значением OFFSET. И только 3 строки выводятся из таблицы TestData на основе столбца ID, поскольку переменная @Fetch опции FETCH была установлена в 3.
Предположим, вы захотели вывести первые три города в штате Орегон на основе значения столбца ID. Для этого можно воспользоваться кодом в листинге 5.
-- Вывод первых трех городов из Орегона
DECLARE @Skip INT;
DECLARE @Fetch INT = 3;
SELECT TOP (1) @SKIP = ID - 1 FROM TestData
WHERE StateName = 'Oregon';
SELECT * FROM TestData
ORDER BY ID
OFFSET @Skip ROWS
FETCH NEXT @Fetch ROWS ONLY;
Листинг 5: вывод первых трех городов в Орегоне
При выполнении кода в листинге 5 выводятся следующие результаты:

Отчет 4: результаты выполнения листинга 5
В листинге 5 переменная @Skip получила значение программно в операторе SELECT. Этот оператор определяет значение ID для первой строки, в которой значением столбца StateName является “Oregon”. При программной установке значения переменной @Skip пропускались все города штата Вашингтон. Выводилось только три города штата Орегон, поскольку переменная @Fetch получила значение 3.
Пейджинг данных с помощью цикла
В примерах выше показывалось, как использовать опции OFFSET и FETCH для определения числа пропускаемых и отображаемых строк из тестовой таблицы данных. Изменяя значения OFFSET и FETCH между вызовами SQL Server, приложение может выполнить пейджинг данных таблицы. Это особенно полезно, когда вам необходимо выводить по одной странице при пейджинге таблицы с большим числом строк. При использовании опций OFFSET и FETCH предложения ORDER BY будет минимизироваться число данных, передаваемых клиенту, т.к. за одно обращение приложению будет посылаться одна страница.
Для симуляции пейджинга по тестовым данных в моем примере будет использоваться цикл WHILE. Код в листинге 6 походит по тестовым данным, выводя по 3 строки за раз. Имейте в виду при рассмотрении этого примера, что для клиентского приложения нормально выполнять операции цикла по одной странице за раз.
-- Пейджинг по тестовым данным
DECLARE @Skip INT = 0 ;
DECLARE @Fetch INT = 3;
DECLARE @LoopCnt INT;
SELECT @LoopCnt = COUNT(*) / @Fetch
FROM TestData;
WHILE @LoopCnt > 0
BEGIN
SET @LoopCnt = @LoopCnt - 1;
SELECT * FROM TestData
ORDER BY ID
OFFSET @Skip ROWS
FETCH NEXT @Fetch ROWS ONLY;
-- Настройка строк для пропуска
SET @SKIP = @SKIP + @Fetch;
END
Листинг 6: пейджинг тестовых данных по 3 строки
Сначала в цикле WHILE выводятся строки, показанные в отчете 5. Это обусловлено тем, что значение @Offset установлено в нуль, а опция @Fetch — в 3.

Отчет 5: первый вывод в цикле
Перед вторым проходом по циклу значение @Skip увеличивается на 3, т.е. на значение переменной @Fetch. В отчете 6 показаны результаты второй итерации цикла.

Отчет 6: второй вывод в цикле
Перед последним проходом по циклу значение @Skip снова увеличивается на 3. В отчете 7 показаны результаты третьей итерации цикла.

Отчет 7: последний вывод в цикле
Как можно увидеть, изменение переменной @Skip между шагами цикла приводит к выводу следующих 3-х строк.
Предостережение: изменения базовых данных
Одной из самых больших проблем при пейджинге данных является то, что вы не накладываете никаких блокировок или не управляете версиями результатов. Каждый вывод строк с помощью оператора SELECT снова вызывает выполнение запроса. Это может стать проблемой для тяжело оптимизируемого запроса, но есть еще одна более интересная проблема с этим связанная. Изменения в результатах вашего запроса.
Любое изменение базовых данных может привести к тому, что вы увидите одни и те же строки снова или, возможно, пропущенные строки. Для примера рассмотрим следующий набор операторов в листинге 7:
-- Вывод первых трех строк
DECLARE @Skip INT = 0;
DECLARE @Fetch INT = 3;
SELECT * FROM TestData
ORDER BY ID OFFSET @Skip ROWS
FETCH NEXT @Fetch ROWS ONLY;
GO
Листинг 7: демонстрация эффекта изменения наборов строк
Этот код вернет следующие результаты:

Отчет 8: результат вывода первых трех строк
Затем, в листинге 8, я удалю строку с и выполню оператор, который приложение выполнило бы при пейджинге этих строк. Это тот же самый код, что в листинге 7, но пропущены 3 строк, а не 0.
DELETE FROM TestData
WHERE /> GO
-- Вывод трех следующих строк
DECLARE @Skip INT = 3;
DECLARE @Fetch INT = 3;
SELECT * F
ROM TestData
ORDER BY ID OFFSET @Skip ROWS
FETCH NEXT @Fetch ROWS ONLY;
Листинг 8: удаление уже выведенной строки, а затем вывод следующих строк
В отчете 9 можно увидеть, что значение ID начинается с 5, а не 4, как ожидалось. А при вставке строк вы можете столкнуться с выводом одних и тех же строк несколько раз.

Отчет 9: Демонстрация пропуска строк с вам требуется получить абсолютно все строки из оператора SELECT, может оказаться полезным сохранить результаты в временной таблице и выполнять пейджинг из нее. Другим методом обработки является использование уровня изоляции SNAPSHOT.
Заключение
В этой статье мы узнали, как использовать опции OFFSET и FETCH предложения ORDER BY для постраничного обхода упорядоченного набора записей. Опция OFFSET использовалась для пропуска указанного числа строк в упорядоченном наборе. А опция FETCH определяет число выводимых строк из набора записей. Управляя этими двумя различными опциями, клиентское приложение может программно выполнять пейджинг строк данных по одной странице за одно обращение.
Ссылки по теме
- Постраничная разбивка записей (пейджинг)
- Уровни изоляции транзакций
- Блокировки, блокирование и тупики в SQL Server
