Задавайте вопросы, мы ответим
Вы не зашли.
Что-то к вечеру вобще голова не соображает...
Необходимо сделать джоин таблицы по некоторым ключам, но из получившихся записей нужна только последняя запись. Как ограничить? Куда совать группировку поля?
ЗЫ Лимитирование записей не предлагать, покажите как юзать группировку, если подобное вообще возможно без подзапросов
Надеюсь, к утру будет ответ и я приступлю дальше к работе
Неактивен
Последняя - понятие относительное. Запись может быть последней только если есть сортировка по какому то критерию.
Нужно выбрать всего одну запись из джойна 2ух таблиц или же на каждый ряд первой таблицы присоединять из множества подходящих рядов второй таблицы только один?
P.S. лучше пояснить примером...
Неактивен
Второй вариант - на каждый ряд первой таблицы присоединять из множества подходящих рядов второй таблицы только один.
Теперь пример. Есть таблица товаров с ценами в валюте, есть таблица курсов валют к национальной.
Задача. Выбрать цены и показать их как в указанной валюте, так и в национальной. Для этого джоиним таблицу курса. Но курсы меняются, по этому таблица имеет несколько записей пары валют, по сему надо выбрать самый свежий курс (есть поле даты добавления курса).
Вот и получаестя, джоиним по ключам обоих валют, но среди найденных записей нужно выбрать актуальный курс.
Неактивен
Неактивен
У меня чуть посложней получилось:
Отредактированно coin (25.02.2009 00:17:59)
Неактивен
Всем спасибо Только задача стояла вот:
Neval написал:
если подобное вообще возможно без подзапросов
Иначе никак?
Неактивен
Да тут подзапросы то простейшие. Самый внутренний вообще работает только с примари индексом, возвращает несколько пар ключей, которые соответствуют самым актуальным курсам (т.е. если в таблице хранятся только курсы долларов и евро, то будет возвращено 2 ключа валюта/дата). Второй подзапрос выбирает значения курсов для этих примари ключей, соответственно тоже будет возвращено всего 2 записи и уже эти 2 найденные записи будут крепиться к каждому ряду таблицы товаров `goods`. Проще врятли получится.
Неактивен
Проблема в том, что мне этот запрос надо на MSSQL состряпать, по сему нужна была собссно логика запроса.
Вот только эта калека не может группировать по не всем полям
К примеру, вот MySQL запрос:
Неактивен
Neval написал:
Но в MSSQL этот запрос не работает, т.к. для поля rate не указана аггрегирующая функция
Было бы хорошо чтобы он и в MySQL не работал, для профилактики от таких ошибок ) Если запрос с группировкой, то выбирать можно только поля по которым группируем, для остальных нужно использовать агрегирующие функции, иначе будут возвращены случайные записи из группы.
Неактивен
С MSSQL не помогу, т.к. даже примерно не представляю что там может помешать выполнится запросу, который я приводил выше, группировка там используется как положено.
Неактивен
Там такой финт, что группироваться ОБЯЗАНЫ все поля, которые участвуют в селекте, другого не дано По этому не знаю как мне извратиться... наверное придётся группировать данные скриптами, благо сами данные нужны именно скриптам.
Неактивен
Неактивен
Ну так поставьте MIN/MAX — должно работать
Неактивен
Если сделать такой запрос:
coin написал:
Вот единственный подзапрос с группировкой и он группирует как раз по всем полям SELECT'а, т.е. по полю `valuta`, а для поля `date` использована агрегирующая ф-я, должно работать, проверьте.
Так - без проблем, а как быть с 4мя полями, если группировка нужна только по двум из них, м?
Как я писал, в MySQL запрос работает как надо, а вот в MSSQL уже грабли)))
Неактивен
Щас попробую сделать джоин на эту же таблицу с ключом по дате)))
Неактивен
Неактивен
Да, собственно так и сделал, работает, спасибо за подсказки!
Неактивен