Dracul
|
|
« : 06-04-2010 08:36 » |
|
Как произвести выборку всех данных из таблицы так, чтобы в полученном результате присутствовали только данные с уникальным значением одного столбца.
То есть, есть таблица name sex коля M валя Ж дуня Ж вася M ярик M
Нужно получить: name sex вася M валя Ж
|
|
« Последнее редактирование: 06-04-2010 08:58 от Sel »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #1 : 06-04-2010 08:41 » |
|
а чем валя Ж отличается от дуня Ж
И то, и то уникальны
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dracul
|
|
« Ответ #2 : 06-04-2010 09:17 » |
|
ну тогда по другому))) нужно выбрать по все одной ячеке в столбце name, с уникальными значениями в sex, отсортировав name по алфовиту)
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #3 : 06-04-2010 09:22 » |
|
select distinct * from table
Это имелось ввиду?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dracul
|
|
« Ответ #4 : 06-04-2010 09:25 » |
|
select distinct * from table - неподойдет, так как выберет все что есть))) distinct - указывает, что не должно быть совпадений в результате, и с его точки зрения валя Ж и дуня Ж - несовпадают, а мне нужно, что бы совпадений в столбце sex небыло!
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #5 : 06-04-2010 10:36 » |
|
Dracul, подсказка уже дана: ключевое слово DISTINCT. Ознакомься с документацией к своей СУБД - там такая конструкция должна быть. SELECT DISTINCT name, sex FROM mytable ORDER BY name, sex
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Sla
|
|
« Ответ #6 : 06-04-2010 10:57 » |
|
Скажи что тебе надо конкретно
Чтобы была только Валя Ж потому что она первая в выборке?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dracul
|
|
« Ответ #7 : 06-04-2010 12:07 » |
|
RXL, запросс SELECT DISTINCT name, sex FROM mytable ORDER BY name, sex приведет к тому, что будут выбраны все записи, с уникальными значениями пары name, sex А мне надо немного другое. 1) получить все возможные варианты поля sex 2) получить по одному вариант name, для каждого полученного значения sex все это сделать в одном запроссе
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #8 : 06-04-2010 12:20 » |
|
Dracul, SELECT name, sex FROM mytable GROUP BY name ORDER BY name, sex;
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Sla
|
|
« Ответ #9 : 06-04-2010 12:34 » |
|
Finch, нет смысла делать group by
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dracul
|
|
« Ответ #10 : 06-04-2010 12:53 » |
|
Finch, будет выдавать больше чем по одному варианту name
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #11 : 06-04-2010 13:00 » |
|
Dracul, Ты хочеш групировать по полу? Ну тогла поставь group by sex. Кстати глубинного смысла данной выборки я тогда не понимаю.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Dracul
|
|
« Ответ #12 : 06-04-2010 13:04 » |
|
Finch, мерси, понял. в смысле глубинного смылса?
Попробывал добавить 3-е поле, что бы name выводилось в зависимости от значений в нем, и неработает(( Допустим добавил поле date (с днями рождения), что бы выводилось по одному name, каждого sex, причем тот name, у которого самое большое значение date
|
|
« Последнее редактирование: 06-04-2010 13:10 от Dracul »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #13 : 06-04-2010 13:26 » |
|
Dracul, ты уж сразу запросы показывай.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dracul
|
|
« Ответ #14 : 06-04-2010 13:44 » |
|
Ок, тогда упрощу таблицу, пусть в ней будет три столбца и следующие значения: Id name sex 1 коля M 2 валя Ж 3 дуня Ж 4 вася M 5 ярик M
В результате выборки, должно выбраться (то есть то что я хочу достичь) по одному полю name для каждого существующего варианта sex, и что бы поля name были отсортированы по id в обратном порядке: Id name sex 5 ярик M 3 дуня Ж
Использую предложенный запрос Finch SELECT id, name, sex FROM mytable GROUP BY sex ORDER BY id DESC, sex; выводиться: Id name sex 2 валя Ж 1 коля М то есть не совсем то, что надо
|
|
« Последнее редактирование: 06-04-2010 13:47 от Dracul »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #15 : 06-04-2010 14:42 » |
|
Зачем?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dracul
|
|
« Ответ #16 : 07-04-2010 05:44 » |
|
это упрощенно, что мне надо. Собственно говоря, в релальном задании, нужно, получить по одной статье, из каждой категории, причем статьи должны быть самыми свежими
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #17 : 07-04-2010 06:04 » |
|
Dracul, ну так бы сразу и говорил, что тебе нужно. А то твои упрощенности - бред Показывай структуру твоих таблиц и запросы к ней
зы. не боись, нам твой код и твои секреты не нужны, просто нужно говорить на одном языке.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dracul
|
|
« Ответ #18 : 07-04-2010 06:31 » |
|
да не боюсь я, просто реально думал так проще будет)))
таблица имеет следующие поля: id - первичный идентификатор date_start - дата публикации name - название info - текст catalog_id - ID каталога
вопрос все тот-же. как одним запросом получить по одной строке, для каждого возможного catalog_id, с сортировкой по полю date_start. То есть нужно вывести по 1-ой статье из каждой категории, так что бы статьи были отсортированны по дате публикации. Изначально мы не знаем сколько у нас различных значений catalog_id в таблице.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #19 : 07-04-2010 06:33 » |
|
да не боюсь я, просто реально думал так проще будет)))
Offtopic: что может быть проще копи-паста ? Поставлю в угол.
|
|
|
Записан
|
|
|
|
Falsehood
Молодой специалист
Offline
Пол:
не может быть
|
|
« Ответ #20 : 07-04-2010 12:02 » |
|
что-то, типа такого? select a.id, b.date_start, a.name, a.info, b.catalog_id from <table_name> a inner join (select max(date_sart) as date_start, catalog_id from <table_name> group by catalog_id) b on a.date_start = b.date_start and a.catalog_id = b.catalod_id order by date_start
P.S. по-моему, к web-у прямого отношения не имеет
|
|
« Последнее редактирование: 07-04-2010 12:04 от Falsehood »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #21 : 07-04-2010 12:05 » |
|
Думаю тут будет чуть сложный запрос SELECT * FROM TABLE t, (SELECT MAX(date_start) AS date_max, catalog_id FROM TABLE GROUP BY catalog_id) AS tz WHERE tz.date_max = t.date_start AND tz.catalog_id = t.catalog_id; запрос не проверял, возможны ошибки PS Falsehood опередила
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Sla
|
|
« Ответ #22 : 07-04-2010 12:28 » |
|
что в таблице уникально?
таблица имеет следующие поля: id - первичный идентификатор Это понятно date_start - дата публикации Это понятно name - название info - текст Текст нужен только для выборки и других целей catalog_id - ID каталога
Осталось Два, неуникальных поля
name - название catalog_id - ID каталога
Строим вспомогательный запрос
Выбираем по макс дату по имени
select max(date_start), catalog_id from my_table where name='Заданное условие' group by catalog_id
Имея подготовленный запрос
SELECT * FROM may_table t, (select max(date_start), catalog_id from my_table where name='Заданное условие' group by catalog_id) as t2 WHERE t2.catalog_id = t.catalog_id order by date_start
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dracul
|
|
« Ответ #23 : 07-04-2010 17:49 » |
|
всем большое спасибо, отдельно еще и Sla за разбор по полочкам, и запрос получил и понял как он работает)
|
|
|
Записан
|
|
|
|
|