Вход

Просмотр полной версии : Отчет....



kjum4n
20.03.2022, 16:05
как сделать так чтобы выводилась только одна строка?59774 59775 5977559776

kjum4n
20.03.2022, 17:31
SELECT*FROM [arch_to_report].[dbo].[Values] WHERE Timestamp>@Начало AND Timestamp<@Конец - запрос выбирает все данные за промежуток времени? а как выбрать только первый?
разобраться не могу с синтаксисом SELECT TOP 1.... Помогите ламеру)

kjum4n
20.03.2022, 17:53
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.

kjum4n
20.03.2022, 18:24
вроде все заработало:
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<@Конец - Последнее значение

kjum4n
20.03.2022, 19:01
все здорово, как теперь из первой строки вычесть вторую?))))59777
помогите ламеру))))

keysansa
20.03.2022, 19:17
все здорово, как теперь из первой строки вычесть вторую?))))59777
помогите ламеру))))

У вас есть поле id, которое увеличивается при каждой новой записи?
ЗЫ. Прошу прощения, внимательнее посмотрел, по какому полю вы сортируете.
1. Вместо TOP 1 ASC/DESC, используйте MAX()/MIN().
2. Каждое поле записи придется обрабатывать отдельно, * тут не подойдет.

SCADAMaster
20.03.2022, 20:39
все здорово, как теперь из первой строки вычесть вторую?))))59777
помогите ламеру))))
У вас будет всего по одной строке в каждом источнике? Как то странно это.
Можете сделать бэнд Итог данных и в нем это сделать.

kjum4n
20.03.2022, 20:44
вроде все заработало:
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<@Конец - Первое значение

извиняюсь за глупые вопросы... первый проект....

kjum4n
20.03.2022, 20:45
да, так и сделал... проблема с запросами решена не полностью, описал выше

SCADAMaster
20.03.2022, 21:12
По составлению SQL запросов ничем помочь не можем - читайте документацию к MS SQL.

kjum4n
21.03.2022, 11:49
вопрос решен. тему можно закрывать.
Если кому то вдруг понадобиться синтаксис такой:
SELECT TOP (1) * FROM [arch_to_report].[dbo].[Values] WHERE Timestamp>@Начало AND Timestamp<@Конец ORDER BY Timestamp ASC