Просмотр полной версии : Отчет....
как сделать так чтобы выводилась только одна строка?59774 59775 5977559776
SELECT*FROM [arch_to_report].[dbo].[Values] WHERE Timestamp>@Начало AND Timestamp<@Конец - запрос выбирает все данные за промежуток времени? а как выбрать только первый?
разобраться не могу с синтаксисом SELECT TOP 1.... Помогите ламеру)
SELECT TOP 1 * FROM [arch_to_report].[dbo].[Values] WHERE Timestamp>@Начало AND Timestamp<@Конец
в таком виде почему то работает без аргумента ASC.... а с ним не работает))
и все бы хорошо но как теперь аналогично получить последнее значение если при установке аргумента DESC нечего не работает?)))
keysansa
20.03.2022, 18:06
Аргумент ASC служит для сортировки.
1. Я у вас его не вижу ни в примерах ни в скриншоте.
2. Какой смысл его использовать, если вы выбираете одну запись?
3. Одну запись стоит ограничивать более надежными условиями, нежели TOP 1
ЗЫ Для определения границ, лучше использовать BETWEEN.
вроде все заработало:
SELECT TOP 1 * FROM [arch_to_report].[dbo].[Values] ORDER BY Timestamp ASC SELECT * FROM [arch_to_report].[dbo].[Values] WHERE Timestamp>@Начало AND Timestamp<@Конец - Первое значение
SELECT TOP 1 * FROM [arch_to_report].[dbo].[Values] ORDER BY Timestamp DESC SELECT * FROM [arch_to_report].[dbo].[Values] WHERE Timestamp>@Начало AND Timestamp<@Конец - Последнее значение
все здорово, как теперь из первой строки вычесть вторую?))))59777
помогите ламеру))))
keysansa
20.03.2022, 19:17
все здорово, как теперь из первой строки вычесть вторую?))))59777
помогите ламеру))))
У вас есть поле id, которое увеличивается при каждой новой записи?
ЗЫ. Прошу прощения, внимательнее посмотрел, по какому полю вы сортируете.
1. Вместо TOP 1 ASC/DESC, используйте MAX()/MIN().
2. Каждое поле записи придется обрабатывать отдельно, * тут не подойдет.
SCADAMaster
20.03.2022, 20:39
все здорово, как теперь из первой строки вычесть вторую?))))59777
помогите ламеру))))
У вас будет всего по одной строке в каждом источнике? Как то странно это.
Можете сделать бэнд Итог данных и в нем это сделать.
вроде все заработало:
SELECT TOP 1 * FROM [arch_to_report].[dbo].[Values] ORDER BY Timestamp ASC SELECT * FROM [arch_to_report].[dbo].[Values] WHERE Timestamp>@Начало AND Timestamp<@Конец - Первое значение
SELECT TOP 1 * FROM [arch_to_report].[dbo].[Values] ORDER BY Timestamp DESC SELECT * FROM [arch_to_report].[dbo].[Values] WHERE Timestamp>@Начало AND Timestamp<@Конец - Последнее значение
так, работают только первые половины запроса, как их подружить чтобы SELECT TOP 1 * FROM [arch_to_report].[dbo].[Values] ORDER BY Timestamp ASC оперировала данными из SELECT * FROM [arch_to_report].[dbo].[Values] WHERE Timestamp>@Начало AND Timestamp<@Конец - Первое значение
извиняюсь за глупые вопросы... первый проект....
да, так и сделал... проблема с запросами решена не полностью, описал выше
SCADAMaster
20.03.2022, 21:12
По составлению SQL запросов ничем помочь не можем - читайте документацию к MS SQL.
вопрос решен. тему можно закрывать.
Если кому то вдруг понадобиться синтаксис такой:
SELECT TOP (1) * FROM [arch_to_report].[dbo].[Values] WHERE Timestamp>@Начало AND Timestamp<@Конец ORDER BY Timestamp ASC
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot