С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/47: Рейтинг темы: голосов - 47, средняя оценка - 4.68
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626

Получить первое и последнее значение с учетом DateTime

23.03.2017, 12:25. Показов 8834. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Необходимо обратиться с запросом к базе данных:
SQL
1
2
3
SELECT A1, A1 
FROM Runtime 
WHERE DateTime > '2017-03-23 00:00:00' AND DateTime < '2017-03-23 02:00:00'
При этом в ответе получить два значения A1 во время 2017-03-23 00:00:00 и A1 во время 2017-03-23 02:00:00, какой модификатор применить к А1 после SELECT?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.03.2017, 12:25
Ответы с готовыми решениями:

DateTime первое значение выводится без H:mm
Есть таблица одна из колонок имеет тип DataTime DateTime date1 = dateTimePicker1.Value; //DateTime date1 = new...

Первое и последнее значение в интервале
Есть таблица вида: Дата Значение время1 значение1 время2 значение2 время3 значение3 время4 значение4 время5 значение5 ...

Первое и последнее пол. значение элементов массива
У меня вышло нечто вот такое: Sub obmass(ByRef x() As Integer, ByRef y() As Integer, ByRef polsum As Integer, ByVal a As Integer,...

17
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
23.03.2017, 12:53
пример данных и ответа приведи
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
23.03.2017, 12:56
Лучший ответ Сообщение было отмечено Chizel как решение

Решение

Не по теме:

Цитата Сообщение от Chizel Посмотреть сообщение
какой модификатор применить
абра-кадабра



SELECT
(SELECT top 1 A1 FROM Runtime WHERE ... ORDER BY [DateTime]) as A1_1,
(SELECT top 1 A1 FROM Runtime WHERE ... ORDER BY [DateTime] DESC) as A1_2

Добавлено через 2 минуты
ну и неравенства должны быть >= и <= если границы интервала должны попасть в выборку
1
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
23.03.2017, 13:05  [ТС]
Ну, например в таблице записаны такие данные

DateTime A1
2017-03-21 00:00:00 5
2017-03-21 00:00:01 7
2017-03-21 00:00:03 9
2017-03-21 00:01:00 10
2017-03-21 00:05:00 8
2017-03-21 00:10:00 4

То ответ будет 5 и 4

Добавлено через 8 минут
Цитата Сообщение от YuryK Посмотреть сообщение
SELECT
(SELECT top 1 A1 FROM Runtime WHERE ... ORDER BY [DateTime]) as A1_1,
(SELECT top 1 A1 FROM Runtime WHERE ... ORDER BY [DateTime] DESC) as A1_2
А сколько запросов к БД в данном случае будет? Два или один?
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
23.03.2017, 13:08
Цитата Сообщение от Chizel Посмотреть сообщение
А сколько запросов к БД в данном случае будет? Два или один?
Запрос один.
А вот таблица, если нет нужного индекса, будет просканирована и отсортирована два раза.
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
23.03.2017, 13:20
Цитата Сообщение от invm Посмотреть сообщение
если нет нужного индекса, будет просканирована и отсортирована два раза.
будем индекс делать или запрос оптимизировать?

SQL
1
2
3
4
5
6
7
SELECT r1.A1, r2.A1 FROM (
 
  SELECT MIN(DateTime) DT1, MAX(DateTime) DT2 FROM Runtime 
  WHERE DateTime >= '2017-03-23 00:00:00' AND DateTime <= '2017-03-23 02:00:00'
) mm
  JOIN Runtime r1 ON r1.DateTime = mm.DT1
  JOIN Runtime r2 ON r2.DateTime = mm.DT2
по нескольку значений в одно время бывает? Какое брать в этом случае?
1
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
23.03.2017, 13:47  [ТС]
Я еще прошлое проверить не успел, как работает, а тут уже запрос оптимизировать можно
Несколько значений не бывает в одно время, но это только часть запроса, если мне нужно будет потом еще MAX(A2), MIN(A3) вытаскивать в этом же запросе из той же таблицы, то куда мне их присобачить в этом оптимизированном запросе?
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
23.03.2017, 13:56
Цитата Сообщение от Chizel Посмотреть сообщение
если мне нужно будет потом еще MAX(A2), MIN(A3) вытаскивать в этом же запросе из той же таблицы
Если в том же временном интервале, то внутри подзапроса mm
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
23.03.2017, 14:31
Цитата Сообщение от YuryK Посмотреть сообщение
будем индекс делать или запрос оптимизировать?
Рекомендую сравнить затраты на "оптимизированный" и первоначальный запрос с индексом и без.

Без индекса, "оптимизированный" запрос сканирует таблицу уже три раза, а не два. А с индексом будет один Range Scan и два Index Seek, в отличие от двух Index Seek в первоначальном.
0
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
23.03.2017, 14:36  [ТС]
Цитата Сообщение от YuryK Посмотреть сообщение
Если в том же временном интервале, то внутри подзапроса mm
не выходит
Цитата Сообщение от invm Посмотреть сообщение
Без индекса, "оптимизированный" запрос сканирует таблицу уже три раза, а не два. А с индексом будет один Range Scan и два Index Seek, в отличие от двух Index Seek в первоначальном.
эммм, а какой же лучше использовать запрос тогда?
Я просто на C# пишу, сейчас вот надо выдернуть из базы пару значений для обработки, а я в sql только простые запросы могу составлять.
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
23.03.2017, 14:46
Цитата Сообщение от Chizel Посмотреть сообщение
не выходит
отчего же?
SQL
1
2
3
4
5
6
7
SELECT r1.A1, r2.A1, A2max, A3min  FROM (
  SELECT MIN(DateTime) DT1, MAX(DateTime) DT2,  MAX(A2) A2max, MIN(A3) A3min 
  FROM Runtime 
  WHERE DateTime >= '2017-03-23 00:00:00' AND DateTime <= '2017-03-23 02:00:00'
) mm
  JOIN Runtime r1 ON r1.DateTime = mm.DT1
  JOIN Runtime r2 ON r2.DateTime = mm.DT2
1
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
23.03.2017, 14:59  [ТС]
Цитата Сообщение от YuryK Посмотреть сообщение
отчего же?
выводятся только два значения A1 и все.
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
23.03.2017, 15:08
Цитата Сообщение от Chizel Посмотреть сообщение
выводятся только два значения A1 и все
и я должен поверить, что в SELECT стоит выбрать 4 поля, а возвращает 2? Ваш финальный вариант запроса - в студию
1
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
23.03.2017, 15:28  [ТС]
Цитата Сообщение от YuryK Посмотреть сообщение
Ваш финальный вариант запроса - в студию
проверил внимательно еще раз, посыпаю голову пеплом - невнимательность
Всем огромное спасибо!
Только так и не понял, какой запрос быстрее.
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
23.03.2017, 15:38
В Studio в правом нижнем углу пишет время выполнения
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
23.03.2017, 16:21
А ничего, что 23-го месяца не бывает?
Замените пробел на букву T:
T-SQL
1
'2017-03-23T00:00:00'
Или ещё проще:
T-SQL
1
'20170323'
0
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
23.03.2017, 16:25  [ТС]
Цитата Сообщение от YuryK Посмотреть сообщение
В Studio в правом нижнем углу пишет время выполнения
У меня реальной базы под рукой нет, я в тестовой балуюсь, в которой пять строчек
Цитата Сообщение от iap Посмотреть сообщение
А ничего, что 23-го месяца не бывает?
У меня в такой последовательности настройки стоят yyyy-mm-dd
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
23.03.2017, 19:19
Цитата Сообщение от Chizel Посмотреть сообщение
Только так и не понял, какой запрос быстрее.
Как говорится: "зависит от".
Если нет индекса по столбцу DateTime, то, чем шире таблица и чем меньше соотношение строк, отбираемых запросом, к общему числу строк в таблице, тем первый запрос будет быстрее второго.
Если индекс по столбцу DateTime есть, первый запрос всегда быстрее второго на весьма незначительную величину.

Добавлено через 2 минуты
Ну и самое главное - при наличии индекса будет значительно быстрее, чем без.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2017, 19:19
Помогаю со студенческими работами здесь

В исходном массиве найти и поменять местами первое минимальное и последнее максимальное значение))
А-исходный массив ( 5;-8;6;-7;-8;6;-8;6;4) -8 первое min значение 6 ...

Получить последнее значение параметра цикла
Всем привет, Новичок в программирование и питоне. Допустим есть код: for i in range(6): print(i)

1с8 Получить последнее значение из запроса
Добрый день. Запросом получаю нужные данные из РегистраСведений. Нужно получить последнюю запись из этого запроса(не из регистра сведений),...

Phpmyadmin - получить последнее значение поля автоинкремента таблицы
Заливаю ссылку на картинку, которая основывается на id записи. Например, картинка записи с id=1 будет 1.png и т.д. Проблема в том,...

Получить последнее(текущее) значение из столбца таблицы MS SQL
Добрый вечер. Возник вопрос, подскажите, как получить последнее значение из столбца таблицы MS SQL и передать его в label если данные...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru