![]() |
|
Модераторы: skyboy |
![]()
|
|
| Random13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Есть у меня таблица
id idDeviceReg idPart idType value 1 5 1 17 2 2 5 1 18 63 3 5 6 14 89 4 8 6 14 90 Задача - вытащить значения value, ну или id - все равно, по приоритету максимума idDeviceReg, чтобы idPart, idType не повторялись. То есть в данном случае третья строка уйдет. Я должен получить 1,2,4 строки как результат операции. Так как у третьей строки значения idPart, idType такие же, как и у четвертой, но у четвертой idDeviceReg больше. Если я даю sql SELECT MAX(idDeviceReg),[idPart],[idType] FROM [tblDeviceValue] GROUP BY [idPart],[idType] то я получаю правильные строки как-бы, но в них нет ни id ни value. Если же выполняю SELECT MAX(idDeviceReg),[idPart],[idType],[value] FROM [tblDeviceValue] GROUP BY [idPart],[idType],[value] то в итоге получаю все строки. Проблема. То есть мне нужна выборка с присутствующим value или id, но сгруппированная только по idPart, idType. Так группировать оно не дает. По чем выбираешь по том только и дает группировать. Может кто подскажет чего, а то я такой нуб в sql Это сообщение отредактировал(а) Random13 - 28.4.2009, 20:03 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Удалено. Ошибка.
Это сообщение отредактировал(а) Akina - 28.4.2009, 21:28 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Random13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Msg 156, Level 15, State 1, Line 6
Incorrect syntax near the keyword 'from'. Там может описка 2 раза стоит from, если один раз убираю - выдает Msg 8121, Level 16, State 1, Line 1 Column 'tblDeviceValue.value' is invalid in the HAVING clause because it is not contained in either an aggregate function or the GROUP BY clause. Мудренный запрос мне такой не написать (... Там как я вижу idDeviceReg не хватает по нему нужно делать максимум, наверное Это сообщение отредактировал(а) Random13 - 28.4.2009, 21:30 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Random13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Спасибо, но пока все равно отрабатывает не правильно оно ищет по максимуму value, а не idDeviceReg. Если я меняю значения так
id idDeviceReg idPart idType value 1 5 1 17 2 2 5 1 18 63 3 5 6 14 90 4 8 6 14 89 то оно мне выдает первые 3 строчки, а не 1,2,4, если я меняю максимум Max(tblDeviceValue.value) на Max(tblDeviceValue.idDeviceReg) выдает пустое значение. Мне просто не максимальные value нужны, value в строчках с максимальным idDeviceReg . Это сообщение отредактировал(а) Random13 - 28.4.2009, 21:41 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Не, ну а поправить совершенно невозможно... вынь да положь готовое и отлаженное...
Мне тоже лень. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Вот так можно ещё попробовать... -------------------- Слава Україні! |
|||
|
||||
| Zloxa |
|
||||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Бабушкин метод
если у Вас MS Sql 2005+ то он должен уметь так:
У вас явно не оракл, оракл умеет еще красивее Ж) -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||||
|
|||||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Akina, пара (idPart, idType) в результате может оказаться не уникальной, если имеем более одной записи (idPart, idType,value=max_value)
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Random13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Извини, такой сложный запрос мне не поправить. В sql нуб, могу писать только простые запросы. Всем, кто пытался помочь спасибо буду разбираться с тем, что дали Отработал без ошибок только sql от Glutton. Буду в нем разбираться. Zloxa у меня 2005 EXPRESS и видимо так он не умеет пишет Msg 156, Level 15, State 1, Line 4 Incorrect syntax near the keyword 'where'. если вере убираю Msg 102, Level 15, State 1, Line 3 Incorrect syntax near ')'. В первом запросе он не знает функцию lpad. И причем у меня id может быть сколько угодно, нельзя их конкретно перечислять. И задачу изначальную я упростил, выделил проблему попонятней. Это сообщение отредактировал(а) Random13 - 29.4.2009, 06:43 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
В этом случае у нас нет дополнительной информации, как выбирать одну запись из нескольких равноценных. И даже нет указания, что требуется в этом случае вывести одну, а не все. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Пожалуйста!
Жутко приятно, но вот только не рекомендовал бы я Вам в нем разбираться, т.к. запрос в целом "не удачный" (сложность алгоритма n^2, а это значить, что на реальных БД с количеством полей в тысячи этот запрос будет очень медленно работать, ито если и будет работать вообще -------------------- Слава Україні! |
||||
|
|||||
| Random13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Чтобы уточнить в таблице невозможно изначально строки где совпадают 3 поля idPart, idType и idDeviceReg. Проблема здесь не в том, а в том, что данный запрос ищет записи по max_value, а не по max idDeviceReg. В этом запросе вообще нет упоминания этого поля... |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
О господи! ну замените ВСЕ вхождения подстроки "value" в тексте запроса на подстроку "idDeviceReg"! -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
lpad дополняет строку слева символами '0' до получения длинны 40 символов (если бы вы сходили по ссылке, которую я оставил, там прочитали бы об этом). Я не знаю диалекта ms sql. Но, думается, выражение в max может быть переведено на его диалект влегкую.. ХОтябы через конкатенацию слева нужного количества дополняющих N символов а затем выделением подстроки из последних N символов. Именно поэтому можно выделить лишь ID, потом сделать по нему join c исходным набором. Это почему же? Парадигма SQL - объекты схемы статичны, ты всегда знаешь структуру запрашиваемых данных, ты всегда знаешь структуру результата. Если я правильно помню, подзапросам в ms sql, обязательно должен быть определен алиас. Как бы там ни было, у меня нет инсталляции ms sql, вы уж как нить постарайтесь сами развить свои компетенции, правильное направление вам уже задано. PS Если у вас нет желания изменить такое положение вещей, думаю, нам не по пути. Это сообщение отредактировал(а) Zloxa - 29.4.2009, 09:23 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |