Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465

Можно ли в таблице БД задать столбец, в котором бы автоматически рассчитывалось бы значение для новой записи?

26.01.2018, 21:22. Показов 1461. Ответов 23

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Подскажите пожалуйста, можно ли в таблице БД задать столбец, в котором бы автоматически рассчитывалось бы значение для новой записи исходя из предыдущих записей.
Например есть таблица, в которой есть люди, их положение (distance_km), дата и время данного положения. Нужно что бы при добавлении новой записи, касающейся данного человека рассчитывалась его средняя скорость ((distance_km2-distance_km1)/((Date2-Date1)*24)+(Time2-Time1))) и записывалась в поле "Speed_piople_km_h".

SQL
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE [dbo].[SPEED]
(
    [Id_SPEED] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [Id_piople] INT NOT NULL, 
    CONSTRAINT [FK_Flood_ToTable] FOREIGN KEY ([Id_post]) REFERENCES [Post]([Id_post]),
    [DATE] DATE NOT NULL,
    [TIME] TIME NOT NULL,
    [distance_km] INT NOT NULL,
    [Speed_piople_km_h]
 
)
Если да, то подскажите пожалуйста как?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2018, 21:22
Ответы с готовыми решениями:

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

Как создать в форме новый столбец в DGV Form3, при добавлении новой записи в таблице Form1
Здравия желаю! Проблема такова: есть у меня несколько форм ( Form1 , Form2, Form3 , родительская (и т.д)), допустим, что в Form1 у меня...

Значение ID новой записи в таблице DataSet
Есть бд1 на ms sql2008 с табличкой Authors (ID int autoincrement primary key,Name nvarchar). Заполняю dataSet и настраиваю также поля...

23
5971 / 4547 / 1094
Регистрация: 29.08.2013
Сообщений: 28,168
Записей в блоге: 3
26.01.2018, 21:58
а почитать справку про CREATE TABLE?
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
26.01.2018, 22:02  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
а почитать справку про CREATE TABLE?
В интернете пытался найти подобные примеры (с CREATE TABLE), но без успешно
0
5971 / 4547 / 1094
Регистрация: 29.08.2013
Сообщений: 28,168
Записей в блоге: 3
26.01.2018, 22:06
не знаю где вы искали и чем, но советую сначала всегда смотреть родную справку
https://msdn.microsoft.com/ru-... (v=sql.120)
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
26.01.2018, 22:13  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
https://msdn.microsoft.com/ru-ru/library/ms174979(v=sql.120)
Пишет "Не удалось найти запрошенную страницу."
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
27.01.2018, 11:34
Имелось в виду что-то такое?

https://docs.microsoft.com/ru-... ansact-sql

У меня вот сомнения в необходимости хранить все эти результаты вычисления.
Можно же использовать view или табличную инлайн функцию...
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
28.01.2018, 14:10  [ТС]
Цитата Сообщение от iap Посмотреть сообщение
У меня вот сомнения в необходимости хранить все эти результаты вычисления.
Можно же использовать view или табличную инлайн функцию...
Ой, я в этом новичок, мне главное сейчас сделать хоть так, а потом можно уже будет думать об оптимизации

То есть общая схема выглядит как-то так?
SQL
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE [dbo].[SPEED]
(
    [Id_SPEED] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [Id_piople] INT NOT NULL, 
    CONSTRAINT [FK_Flood_ToTable] FOREIGN KEY ([Id_post]) REFERENCES [Post]([Id_post]),
    [DATE] DATE NOT NULL,
    [TIME] TIME NOT NULL,
    [distance_km] INT NOT NULL,
 
    [Speed_piople_km_h] AS ((distance_km2-distance_km1)/((Date2-Date1)*24)+(Time2-Time1));
 
)
Как выбрать запись из таблицы с таким же Id_piople, но с самым позднем временем?

Добавлено через 22 часа 23 минуты
Если мы будем как-то выбирать с помощью select запись с максимальной датой и временем, select будет учитывать запись, для которой мы ведем расчёт?

Можно ли задать select внутри таблицы по таблице, в которой он объявлен?
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
31.01.2018, 23:48  [ТС]
qwertehok, если я объединю столбцы DATE and TIME будет ли работать следующее решение?
SQL
1
2
3
4
5
6
7
8
9
10
CREATE TABLE [dbo].[SPEED]
(
    [Id_SPEED] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [Id_piople] INT NOT NULL, 
    CONSTRAINT [FK_Flood_ToTable] FOREIGN KEY ([Id_post]) REFERENCES [Post]([Id_post]),
    [DATE_TIME] DATE NOT NULL,
    [distance_km] INT NOT NULL,
    [Speed_piople_km_h] AS MidleSpeed (Id_piople, DATE_TIME, distance_km)
 
)
а в хранимых функцию пропишу вот такую функцию:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE FUNCTION MidleSpeed (@Id_piople INT, @DATE_TIME DATETIME, @distance_km INT)
 RETURNS INT
 AS
 BEGIN
 CREATE TABLE [dbo].[SPEED_2]
(
    [Id_SPEED] INT,
    [Id_piople] INT, 
    [DATE_TIME] DATETIME,
    [distance_km] INT
)
 INSERT INTO dbo.SPEED_2
 SELECT [Id_SPEED], [Id_piople], [DATE_TIME], [distance_km] FROM SPEED WHERE Id_piople=@Id_piople
 @maxTime DATETIME,
 @maxTime=SELECT MAX(DATE_TIME) FROM SPEED.DATE_TIME
 @lastDistance_km INT
 @lastDistance_km=SELECT [distance_km] FROM SPEED_2 WHERE DATE_TIME=@maxTime
 
 DROP [dbo].[SPEED_2]
 
 RETURN ((@distance_km-@lastDistance_km)/(DATEDIFF(HOUR, @maxTime, @DATE_TIME))
 END
0
5971 / 4547 / 1094
Регистрация: 29.08.2013
Сообщений: 28,168
Записей в блоге: 3
01.02.2018, 07:05
Цитата Сообщение от Vlad__i__mir Посмотреть сообщение
INSERT INTO dbo.SPEED_2
...
DROP [dbo].[SPEED_2]
интересная конструкция. есть какой то внутренний смысл? или просто сервер простаивает?
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
01.02.2018, 11:25  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
интересная конструкция. есть какой то внутренний смысл? или просто сервер простаивает?
Не понял вашего вопроса, я в SQL программировании чайник.

Объясню на словах, что хотел сделать. Таблицу новую создаю для того чтобы отобрать в неё все записи с человеком для которого рассчитывается скорость и новую строку о котором мы добавляем (Id_piople). Для этого вставляю в таблицу все записи из исходной таблицы (куда добавляется новая строка) с соответствующим Id_piople (вот тут конечно есть вопрос: не попадёт ли туда запись, которую мы добавляем?). Далее из них выбираю запись с самой поздней датой и беру расстояние, которое соответствует данной дате. Дальше так как эта таблица становится уже не нужной, удаляю её.

Если неверно, скажите пожалуйста, что не верно и как это можно исправить.
0
5971 / 4547 / 1094
Регистрация: 29.08.2013
Сообщений: 28,168
Записей в блоге: 3
01.02.2018, 11:39
я не понял зачем создавать таблицу
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
01.02.2018, 11:43  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
я не понял зачем создавать таблицу
ну у нас же в результате работы
SQL
1
SELECT [Id_SPEED], [Id_piople], [DATE_TIME], [distance_km] FROM SPEED WHERE Id_piople=@Id_piople
может быть не одна запись, а много. Что бы потом из них выбрать запись с максимальной датой.
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
01.02.2018, 11:47
чувак, почитай уже книжку, хоть-какую
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
01.02.2018, 11:56  [ТС]
Цитата Сообщение от pincet Посмотреть сообщение
чувак, почитай уже книжку, хоть-какую
Почитал, написал данную функцию. Если она не верна, то скажите где и в чём ошибка. Потому что можно прочитать и две книжки, но не найти ответ на свой вопрос.
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
01.02.2018, 12:15
есть нюанс - читать нужно незарадлидля "прочитать"

Добавлено через 2 минуты
и таки да, почитай Дейта
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
01.02.2018, 12:27  [ТС]
Цитата Сообщение от pincet Посмотреть сообщение
и таки да, почитай Дейта
Я как-то открыл эту большую книгу, она мне показалась мало доступной для понимания, поэтому решил пользоваться справками msdn.microsoft.com
И да, у меня сейчас стоит конкретная задача и если я пойму как её верно решить, то это будет лучше прочитанной теории, которую не факт, что ты правильно сможешь потом применить на практике.
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
01.02.2018, 12:29
ну, тогда "Пилите, Шура, они золотые" (с)

Добавлено через 55 секунд

Не по теме:


побольше бы таких погроммистов...



соврал. Давно не перечитывал. "Пилите, Шура, пилите, она золотая!"
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
01.02.2018, 12:50  [ТС]
Цитата Сообщение от pincet Посмотреть сообщение
ну, тогда "Пилите, Шура, они золотые" (с)
А вы наверное к курсу второму обучения уже Дейта от корки до корки прочитали и поняли.
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
07.02.2018, 18:37  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
я не понял зачем создавать таблицу
Пришёл к следующему варианту: для отбора записей с нужным ID создаю 1-ую функцию, которая должна вернуть таблицу, содержащею записи только с требуемым Id_piople из нашей таблицы, а вторая функция вызывает 1-ую и выбирает из вернувшейся таблицы максимальное значение времени и соответствующее этому времени расстояние, производит соответствующий расчёт средней скорости и возвращает получившиеся значение.

T-SQL
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE [dbo].[SPEED]
(
    [Id_SPEED] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [Id_piople] INT NOT NULL, 
    CONSTRAINT [FK_Flood_ToTable] FOREIGN KEY ([Id_post]) REFERENCES [Post]([Id_post]),
    [DateAndTimes] DATETIME NOT NULL,
    [distance_km] INT NOT NULL,
 
    [Speed_piople_km_h] AS ;
 
)
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE FUNCTION CreateTableInfSPEED (@Id_piople int)
 RETURNS @FloodHelp TABLE
 (
    Id_FloodHelp int,
    Id_piople int,
    DateAndTimes DATETIME,
    distance_km INT,
        MediumSpeed AS MediumSpeed(Id_piople, DateAndTimes, distance_km)
 )
 AS
 BEGIN
 INSERT INTO @FloodHelp
 SELECT [Id_FloodHelp], [Id_piople], [DateAndTimes], [distance_km] FROM dbo.SPEED WHERE Id_piople=@Id_piople,
 RETURN;
 END
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE FUNCTION MediumSpeed (@Id_piople int, @DateAndTimes DATETIME, @distance_km int)
 RETURNS int
 WITH SCHEMABINDING
 AS
 BEGIN
 DECLARE @maxTime DATETIME
 SET @maxTime=(SELECT MAX(DateAndTimes) FROM CreateTableInfSPEED(@Id_piople))
 DECLARE @lastLevel int
 SET @lastLevel=(SELECT distance_km FROM dbo.CreateTableInfSPEED(@Id_piople) WHERE DateAndTimes=@maxTime)
 DECLARE @time int
 DECLARE @speed int
 SET @speed=0
 SET @time=DATEDIFF(HOUR, @maxTime, @DateAndTimes)
 IF (@time<>0)
 SET @speed=(@LevelWater-@lastLevel)/@time;
 RETURN (@speed);
 END
Проблема в том, что в 1-ой функции (CreateTableInfSPEED), подчёркивает красным " [Id_FloodHelp], [Id_piople], [DateAndTimes], [distance_km] dbo.Flood ", говорит, что недопустимое имя столбцов и недопустимое имя объекта.
Может быть это из-за того, что таблица SPEED ещё не создана?
В свою очередь я её не создаю потому что у меня не созданы ещё все функции для расчёта поля "MediumSpeed AS MediumSpeed(Id_piople, DateAndTimes, distance_km)".
Как же здесь быть?
0
07.02.2018, 18:58

Не по теме:

Цитата Сообщение от Vlad__i__mir Посмотреть сообщение
Как же здесь быть?
даже не знаю что сказать

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2018, 18:58
Помогаю со студенческими работами здесь

Изменение первой в таблице записи (одного кортежа) при добавление новой записи
Добрый день! При добавлении новой записи через форму ДобСтуд в таблице Студ у первой записи меняется Номер группы. Причем новая запись...

MS Sql: при добавлении новой записи, информация из первой записи в таблице исчезает
Ошибка заключается в том, что при добавлении новой записи(через программу), информация из первой записи в таблице исчезает. При добавлении...

Столбец «рейтинг» в таблице «проекты» должен автоматически высчитываться
Помогите пожалуйста. вопрос жизни и смерти. надо диплом сдать через 3 часа. Столбец «рейтинг» в таблице «проекты» должен автоматически...

Найти столбец в котором сумма элементов максимальна. Вывести значение суммы и столбец на экран
Найти столбец в котором сумма элементов максимальна. Вывести значение суммы и столбец на экран

При добавлении новой записи в dbgrideh автоматически отмечать галочкой
Всем привет. я добавляю в новую запись в dbgrideh dbgrideh.datasource.dataset.insert у меня есть чеки,как сделать так что бы при...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru