Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Подскажите пожалуйста, можно ли в таблице БД задать столбец, в котором бы автоматически рассчитывалось бы значение для новой записи исходя из предыдущих записей. Например есть таблица, в которой есть люди, их положение (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. Если да, то подскажите пожалуйста как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 21:58 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Vlad__i__mirПодскажите пожалуйста, можно ли в таблице БД задать столбец, в котором бы автоматически рассчитывалось бы значение для новой записи исходя из предыдущих записей.конкретно на этот вопрос (без обсуждения влияния на производительность) ответ - вычисляемый столбец таблицы может быть основан на функции Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 22:25 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
В триггере можно хоть квадратные уравнения решать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 22:26 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Дедушка, это он новую таблицу создаст, а мне нужно чтобы он в этой же таблице в столбец записал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 23:31 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич, что за тригер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 23:32 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Vlad__i__mirГавриленко Сергей Алексеевич, что за тригер?Про триггеры (create trigger) и вычисляемые поля (computed columns) на основе функций вам придется прочитать в документации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 23:47 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Дедушка, dbo.fn_Function(id) - это обычная прописываемая нами функция? Где её нужно прописывать? Или это триггер? Можно ли будет такую же функцию также вызвать в столбце таблицы, в которою добавляется запись? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:44 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 13:26 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Vlad__i__mir, немного не по вопросу, но может лучше сделать представление? типа такого Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 14:26 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Дедушка Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. До этого сталкивался и применял функции только на основе SELECT и арифм операции, поэтому почти ничего не понятно. Можете сказать где прочитать про данные конструкции? Где они прописываются??? В колонке таблицы при её создании после "AS" или в триггерах? Или ...? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 18:43 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич https://msdn.microsoft.com/ru-ru/library/ms186755(v=sql.120).aspx Спасибо, немного прояснилось. Но в какой части БД необходимо прописывать код функции не понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 20:16 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Дедушка Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 1. Зачем мы удаляем здесь функцию? Код: sql 1. 2. 2. Почему у нас здесь 2 "return"? Оба return-a относятся к функции dbo.fn_T? 3. Что должен вернуть 1-ый return, а что 2-ой? Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 20:38 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Vlad__i__mir, Вопрос 2 снимается, узнал что это мы определяем тип возвращаемого функцией значения. Просто в программировании БД я почти нуль )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 22:00 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Дедушка, если я объединю столбцы DATE and TIME будет ли работать следующее решение: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. а в хранимых функцию пропишу вот такую функцию: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 23:45 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Vlad__i__mir, INSERT INTO dbo.SPEED_2 SELECT [Id_SPEED], [Id_piople], [DATE_TIME], [distance_km] FROM SPEED WHERE Id_piople=@Id_piople ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 23:53 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Vlad__i__mir, A. Прочитайте еще раз ссылку которую Вам дали выше, особенно после слов: 1)В функциях допустимы следующие инструкции.2)Ограничения B. Как вы думаете что вернет функция DATEDIFF(HOUR, @maxTime, @DATE_TIME) для значений @maxTime='20180101 00:00:00', @DATE_TIME='20180101 00:00:10' и какую ошибку вы получите вызвав ее в знаменателе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 17:16 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
iiyamaVlad__i__mir, A. Прочитайте еще раз ссылку которую Вам дали выше, особенно после слов: 1)В функциях допустимы следующие инструкции.2)Ограничения B. Как вы думаете что вернет функция DATEDIFF(HOUR, @maxTime, @DATE_TIME) для значений @maxTime='20180101 00:00:00', @DATE_TIME='20180101 00:00:10' и какую ошибку вы получите вызвав ее в знаменателе А. Прочитал. Понял, что внутри функции нельзя создавать таблицу. Попытался обойти это ограничение с помощью второй функции: 1-ая возвращает таблицу, которая содержит только записи с нужным ID, а 2-я уже производит все остальные вычисления с таблицей, которую вернула 1-ая функция. Но проблема в том, что приходится вызывать данную функцию дважды: первый раз для того чтобы определить максимальное время, а второй раз для того чтобы выбрать расстояние соответствующее данному времени. И вот тут вопрос - получается одни и те же записи будут добавлены дважды? Не знаю как правильней будет здесь поступить. В. Устранил эту ошибку путем добавления проверки на равенство нулю. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. Помогите пожалуйста с пунктом А. Мне кажется у меня не верно, но как по другому обойти ограничение не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 20:22 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Vlad__i__mir, Прошу прощения, может я тупой или сегодня пятница, а может и то и другое, НО ИМХО зачем хранить среднюю скорость в таблице? Ведь это явно расчетная величина, зависящая от текущего и предыдущего положения в пространстве. Ведь если у вас добавляются данные в середину интервала, который у Вас уже рассчитан и сохранен, то Вы должны рассчитать новую среднюю скорость и для добавляемой точки и перерасчитать скорость для уже сохраненной: A(хранение)___C(добавление)____B(хранение). Далее ИМХО во второй степени 1. Напишите запрос который по положениям в пространстве-времени(ваша таблица), рассчитывает изменения в пространстве. Т.е. Ваша логика определения предыдущего положения. 2. Вычислите характеристику 3. Только далее думайте как материализовать эти вычисления: в виде запроса, в виде представления, в виде табличной функции, в виде новой сущности, в виде нового поля или еще чего Пи.Эс. Я бы реализовал через представление, где вместе со скоростью, была бы доступна информация и по 2м положениям в пространстве, на основе чего она была и рассчитана ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 10:43 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
iiyama, это я сделал. Проблема с реализацией. В этом прошу помощи. 1. Мы находим записи с нужным нам ID точки (Id_piople), далее находим среди них запись с максимальной датой и временем и берём расстояние соответствующее этой дате времени. Тут возникает один вопрос попадёт или нет в эту выборку добавляемая запись, для которой мы делаем расчёт? Код: sql 1. 2. 3. 4. 2. Вычитаем из переданного в аргументы функции текущего расстояние найденное, и из времени текущего времени переданного в аргументы найденное. Производим деление полученных в результате вычитаний значений, получаем среднею скорость: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 11:39 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
Vlad__i__mir, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 12:34 |
|
||
|
Расчёт значений в БД
|
|||
|---|---|---|---|
|
#18+
iiyama, спасибо! Ответе ещё пожалуйста на пару не объемных вопросов. 1. Почему решили, что лучше объединить столбцы [Date] и [Time], а не взять один типа datetime? 2. Вот здесь можно сделать сортировку по времени, а то вдруг он в обратном направлении пойдёт? Код: sql 1. 2. И ещё пару вопросов всё-таки по функциям (простоя не знаю получится ли у меня отразить представление в C# как класс сущность): А. Может ли функция вызываемая для расчёта значения поля таблицы просматривать и анализировать строки этой же таблицы? Б. Если А - да, то попадёт ли в её диапазон анализа запись, которая добавляется и для которой рассчитывается значение столбца? В. Можно ли в качестве источника данных в запросе SELECT указывать не имя таблицы, а функцию, которая должна вернуть таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 01:58 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39591971&tid=1690358]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 361ms |

| 0 / 0 |
