[TSQL] Написать запросик
select id, max(weight) from Таблица group by id
спасибо
Приходит тока с опытом Два года назад для меня это был супер запрос.
я до сих пор не научился понимать десятистраничные запросы с временными таблицами (ЗУП 1с 8.1)
десятистраничные запросы с временными таблицами (ЗУП 1с 8.1)
в типовом ЗУПЕ есть ошибки в таких запросах, я их исправляю не трогая текста запроса - перебираю уже таблицу значений перед загрузкой в док - по крайней мере так удаеццо разграничить свои и чужие ошибки, а у них запросы писались разными людьми и очень часто в какихто нештатных ситуациях они не так отрабатываюццо (например автозаполнение начилсения аванса если сотрудник перешол из филиала в головную организацию)
Да я не спорю. Каждый свою матрицу настраивает как может.
Иногда эти запросы пишут марсиане (люди, которым программирование противопоказано). И зачастую большой запрос можно переписать попроще.
а если в изначальной таблице помимо этих двух столбцов имеется еще несколько, как их тоже вывести с учетом исходной задачи?
И зачастую большой запрос можно переписать попроще.сколь времени потребуеццо чтобы переписать 10-страничный запрос? я проковырялся день, нифига не в нем не понял, плюнул и за час все разобрал в таблицах значений. работодателю кстати пофиг как ты делаеш, главное чтоп быстрее - это отчасти объясняет кривость этих запросов, чтоп их во всех режимах проверить нада кучу времени, которое никто не хочет оплачивать..
id, sCode, sName,
max(weight)
from Таблица
group by id, sCode, sName
неа, бред выводит, я уже так пробовал
Что значит бред? Выводит именно то, что написано: группировку по трем полям таблицы и максимальное значение веса в группе.
а нужно обычно вывести вспомогательные поля из максимальной записи, а не группировать по вспомогательным полям
условие уникальности id не соблюдается, как в простом случае
Если для одного id несколько записей с максимальным весом, но с разными вспомогательными данными? Перечисление выводить... Я не телепат.
а нужно обычно вывести вспомогательные поля из максимальной записи, а не группировать по вспомогательным полямна это ругается
Column 'Fields.Name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Если для одного id несколько записей с максимальным весом, но с разными вспомогательными данными?исключено - в пределах id вес уникален
объект время значение
1 10:00 5
1 15:00 12
1 20:00 16
2 15:00 7
2 16:00 8
в данном случае, значение - и получается вспомогательным полем, которое не является ни ключом (полем для группировки ни критерием выбора(агрегирования)
Если для одного id несколько записей с максимальным весом, но с разными вспомогательными данными?в данном случае, вспомогательными полями было бы:
1. время измерения веса
2. источник сообщения о весе
3. кто внес запись в базу
и т.д.
Да я прекрасно все понимаю.
1. время измерения весаа как их вывести?
2. источник сообщения о весе
3. кто внес запись в базу
если поле группировки одинночное, и weight уникален внутри группы, то как-то так:
select * from data
where data.weight=(select max(weight) from data as data2 where data2.id=data.id)
если база поддерживает аналитические функции, то через нихms sql express
иначе придется трахаться со вложенными запросами.ваще-то это один джоин, причем для любого количества полей
если поле группировки одинночное, и weight уникален внутри группы, то как-то так:здесь ограничение "поле группировки одинночное" тоже не нужно
code:
select * from data
where data.weight=(select max(weight) from data as data2 where data2.id=data.id)
согласен
аналитику поддерживает.
ps
сходу запрос через аналитику не напишу
а еще прикольно попробовать это на LINQ написать
select t.id, t.time, t.value from t left join t as x on (t.id = x.id and t.time < x.time) where x.time is null;
select * from data where data.weight=(select max(weight) from data as data2 where data2.id=data.id)благодарствую - запахало
ЗЫ: интересно общественное мнение по поводу ламо-вопросов, наподобии этого в частности и многих предыдущих. Очевидно, что для гуру они представляют мало интереса, т.к. являются очевидными и мешают фильтровать ценные знания. С другой стороны что делать ламерам если появляется необходимость уточнить какой-либо, возможно не сложный, но не очевидный для них вопрос. У меня опыта написания серьезных вещей вообще нет, времени рыться в толстенной литературе не всегда есть, да и поиски могут затянуться, особенно если не знаешь, что искать. Рюхающих в этом деле коллег или друзей тоже нет. Дабы ускорить процесс поиска решения пишу сюда, но вот сколько я не писал в этот раздел, после каждого топика чувствую себя как, извините, обосранный
Может стоит создать раздел (доп, альт, обсуждаемый) куда каждый может писать любые непонятные ему вещи, (пусть они буду элементарными для многих) не опасаясь быть посланым, осмеяным и т.п. и заодно маячить перед глазами не будет.
Как считаете?
Как считаете?альт нафик
во-первых придется подписываться на еще один раздел, во-вторых при создании поста нужно будет мучительно думать в какой раздел его запостить
а ламовопросы я считаю нужно задавать не на форуме а в гугле
во-первых быстрее получишь ответ
во-вторых получишь кучу ответов и выбирешь больше понравившийся
ябы гуглу написал: "есть таблица такая, хочу такую"
Это если конкретно по БД
К тому же там можно спрашивать по конкретной БД. Я например на MS SQL аналитику совсем не знаю, а вот на Оракле написать твой запрос - 5 сек.
ладно буду там мозг всем взрывать
Оставить комментарий
nik93
есть таблица (id int, weight int)оба столбца не уникальны
нужно из этой таблицы выбрать строки с максимальным weight для каждого из id.
например
1 1
1 2
2 3
5 4
5 3
5 6
получаем
1 2
2 3
5 6
я делаю так - создаю временную таблицу (id int, weight int) где id уже уникально,
а потом по ней пробегаюсь курсором и для каждого id заполняю weight максимальным
для данного id из первоначальной таблицы. Но как-то мне этот способ не нравится,
возможно такую штуку сделать без курсора и временных таблиц ?