Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
6 / 6 / 0
Регистрация: 16.09.2012
Сообщений: 71
1

Не могу вставить datetime в datetime путем INSERT INTO SELECT

01.04.2013, 16:57. Показов 3349. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Думаю мой вопрос ламерский и находится где-то в FAQ, где я его не нашел.

Мне нужно продублировать данные с одной таблицы в другую. Создал ее, сделал те же параметры что в исходной.
SQL
1
2
INSERT INTO cars (Baseid, maxdate)
SELECT     baseid, maxdate FROM cars_er
Запрос уходит в себя не вставляя не строчки. Опытным путем было выведано, что проблема в поле maxdate. В исходной таблице это вычисляемое поле путем max(datetime) as maxdate group by. Если вставлять одни baseid, то без проблем. Подключаем поле с датой, уходит в себя. Пробовал делать и convert и cast, всё одно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2013, 16:57
Ответы с готовыми решениями:

Несоответствие формата даты System.DateTime и DATETIME в SQL Express Edition
Столкнулся с такой проблемой: В System.DateTime дата пишется в формате дд.мм.гггг чч.мм.сс, а...

SQLite. Работа с DateTime. Как вытащить из БД и конвертировать в формат DateTime
У меня таблица SQLite Есть колонка INTEGER которая хранит значение типа "2018-06-09 16:10:00" ...

Фильтр дат в таблице между DateTimePicker1.DateTime и DateTimePicker2.DateTime
Не пинайте сильно. Начинающий. Не срабатывает выбор дат из таблицы. База GDB Firebird. Поле таблицы...

Можно ли создать поле в таблице с именем datetime ? типа datetime
Добрый день ! вопрос почти чайника : Можно ли создать поле в таблице с именем datetime ? типа...

10
107 / 107 / 5
Регистрация: 28.12.2012
Сообщений: 207
01.04.2013, 22:40 2
Функции агрегирования не могут использоваться в вычисляемых столбцах в явной форме.
Предполагаю, что для расчета maxdate в таблице cars_er используется функция(назовем её dbo.fn_MaxValue), тогда при INSERT в таблицу cars вы также можете использовать данную функцию:
T-SQL
1
2
INSERT INTO cars (Baseid, maxdate)
SELECT     baseid, dbo.fn_MaxValue() FROM cars_er
0
6 / 6 / 0
Регистрация: 16.09.2012
Сообщений: 71
02.04.2013, 09:34  [ТС] 3
Я дико извиняюсь, но у меня не получается.
У меня cars_er - view со следующим запросом:
SQL
1
2
3
4
5
6
SELECT     _GPS_1.baseid, s1.maxdate, _GPS_1.xword, _GPS_1.yword
FROM 
        (SELECT     baseid, MAX(datetime) AS maxdate
                       FROM          dbo._GPS AS _GPS_2         GROUP BY baseid) AS s1 INNER JOIN
                      dbo._GPS AS _GPS_1 ON _GPS_1.baseid = s1.baseid AND _GPS_1.datetime = s1.maxdate INNER JOIN
              dbo.CarAll AS CarAll_1 ON _GPS_1.baseid = CarAll_1.BaseID
Как мне тогда из запроса в запросе и все это во вьюхе вытащить эту функцию?

P.S. Извините за читаемость когда, это помощник в SQL так обозвал таблички.
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
02.04.2013, 10:22 4
Ivanmsk, включите действительный план выполнения (ctrl+M, например) и посмотрите рекомендации оптимизатора относительно индексов для SELECT (пока без INSERT)
Подключите рекомендованные индексы и сравните скорость выполнения запроса с индексами и без индексов :-)
0
6 / 6 / 0
Регистрация: 16.09.2012
Сообщений: 71
02.04.2013, 11:01  [ТС] 5
cygapb-007, Включил, а гдепосмотреть рекомендации относительно индексов? Буду очень благодарен за наставление. Без "рекомендаци" индексов выполняется 10 сек.
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
02.04.2013, 12:11 6
Цитата Сообщение от Ivanmsk Посмотреть сообщение
cygapb-007, Включил, а гдепосмотреть рекомендации относительно индексов? Буду очень благодарен за наставление. Без "рекомендаци" индексов выполняется 10 сек.
Ну, например здесь пишет, что с индексом будет работать на 99% быстрее :-)
Не могу вставить datetime в datetime путем INSERT INTO SELECT
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
02.04.2013, 12:32 7
А, да, забыл дописать: далее ПКМ и пункт "Сведения об отсутствующих индексах", затем в новом окне Ctrl+Shift+M, указать имя для нового индекса, раскомментировать, выполнить...
Но при этом надо помнить, что каждый индекс ускоряет выборку данных, но замедляет обновление :-)
0
6 / 6 / 0
Регистрация: 16.09.2012
Сообщений: 71
02.04.2013, 17:02  [ТС] 8
cygapb-007, спасибо! но у меня не пишет такие подсказки
Но обязательно буду теперь пользоваться.

Добавлено через 36 минут
Вопрос темы все еще актуален.
0
107 / 107 / 5
Регистрация: 28.12.2012
Сообщений: 207
02.04.2013, 17:12 9
Попробуйте так:
T-SQL
1
2
3
4
5
6
7
8
9
INSERT INTO cars (Baseid, maxdate)
SELECT _GPS_1.baseid, s1.maxdate
FROM (
    SELECT  baseid, 
            MAX(datetime) AS maxdate
    FROM dbo._GPS AS _GPS_2
    GROUP BY baseid) AS s1 
    INNER JOIN dbo._GPS AS _GPS_1 ON _GPS_1.baseid = s1.baseid AND _GPS_1.datetime = s1.maxdate 
    INNER JOIN dbo.CarAll AS CarAll_1 ON _GPS_1.baseid = CarAll_1.BaseID
0
1644 / 1145 / 171
Регистрация: 23.07.2010
Сообщений: 6,796
02.04.2013, 17:14 10
Цитата Сообщение от cygapb-007 Посмотреть сообщение
Но при этом надо помнить, что каждый индекс ускоряет выборку данных, но замедляет обновление :-)
А как насчет Insert?
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
02.04.2013, 18:55 11
pincet, в моем примере оптимизатор перечислил в include все поля, расшифровав их из select *. Естественно, в таком виде использовать индекс не разумно, если из выборки реально требуется несколько полей.
Про insert - что Вы имели в виду? Изменяется ли индекс при добавлении новой записи? Или insert не является обновлением информации, хранящейся в таблице? Не совсем понял мысль, извините.

Добавлено через 1 час 5 минут
Цитата Сообщение от Ivanmsk Посмотреть сообщение
Вопрос темы все еще актуален.
Попробуйте просто создать индексы для полей, по которым идет объединение таблиц, должно бы помочь...
Например, на выбор,
create index IX__GPS on dbo._GPS (baseid, datetime)
create index IX__GPS on dbo._GPS (baseid) include (datetime)
create clustered index IX__GPS on dbo._GPS (baseid, datetime)
0
02.04.2013, 18:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2013, 18:55
Помогаю со студенческими работами здесь

SQLite insert in DateTime
Не выходит добавить запись в столбец, тип которого DateTime Сам запрос: insertCommand = "INSERT...

DateTime.Now для DateTime sql server
Я понимаю что данный вопрос не раз открывался но в поисках решения гуглю уже 2-ой день и все...

Ошибка: 0 - DateTime::__construct() [datetime.--construct]:
Не могу зайти в профиль компонента JomSocial из-за данной ошибки: 0 - DateTime::__construct() :...

Select between для типа datetime
Добрый день. Имеется таблица с данными, из которой необходимо достать данные в зависимости от...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru