За последние 24 часа нас посетили 17699 программистов и 1291 робот. Сейчас ищут 1633 программиста ...

не могу запрос состряпать...

Тема в разделе "MSSQL", создана пользователем Вльдемар, 9 мар 2007.

  1. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    К php конечно отношения не имеет :)


    Есть таблица Repairs(id, date_begin, date_end, id_avto, description)
    Таблица, где хранятся записи о ремонтах автомобилей.
    И нужен запрос, который выведет строки в которых id_avto больше всего, т.е. какой автомобиль больше всего ремонтировался.

    Вопрос сформулировал как смог.

    Тут с этими праздниками и башка что то соображает плоховато :)
     
  2. eduha

    eduha Активный пользователь

    С нами с:
    8 ноя 2006
    Сообщения:
    278
    Симпатии:
    0
    Адрес:
    Караганда
    Код (Text):
    1. SELECT * FROM Repairs ORDER BY id_avto DESC LIMIT 1
     
  3. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Не, нето.
    Вопрос я криво сформулировал.

    Допустим есть там данные, опустим даты и ддескришн
    ---------------------
    id | id_avto |
    ---------------------
    1 | 2 |
    2 | 4 |
    3 | 2 |
    4 | 8 |
    5 | 2 |
    6 | 4 |
    7 | 2 |
    ---------------------

    Вот в этом примере строк больше всего где есть id_avto = 2.
    И мне нужно выбрать записи где id_avto = 2.
    Но я не знаю что это именно 2, ведь данные в таблицу добавляются, и записей может стать больше, где id_avto мо быть другое
     
  4. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Код (Text):
    1. SELECT MAX(COUNT(id_avto)) AS id_avto FROM table GROUP BY id_avto ORDER BY id_avto DESC LIMIT 1
    Ну это для MySQL, с MSSQL к сожалению не очень знаком, посему синтаксис и функции могут чуть подругому называться, но идея правильная...
     
  5. eduha

    eduha Активный пользователь

    С нами с:
    8 ноя 2006
    Сообщения:
    278
    Симпатии:
    0
    Адрес:
    Караганда
    (удалено)
     
  6. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    еррор
    Код (Text):
    1.  
    2. #1111 - Invalid use of group function
    В MS лимит по моему чуть по другому задается, а агрегатные функции такие же
     
  7. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Мне не нужен максимальный id_avto, мне нужно чтобы он содержался в максимальном количестве строк, и заранее неизвестен.
     
  8. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Блин, я тут подумал, MAX то нафиг не нужен, ну и из-за него вообще-то ошибка
    Код (Text):
    1. SELECT COUNT(id_avto) AS id_avto FROM table GROUP BY id_avto ORDER BY id_avto DESC LIMIT 1
    Он ведь сортируеться, и самое большое число будет сверху, он его и выберет, остальное отрежет лимитом.
     
  9. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    гы :)
     
  10. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    vb
    Шантажист! Я не ходячая библиотека! :) Особенно не по MSSQL'y :p
     
  11. Anonymous

    Anonymous Guest

    Да тут чистый ANSI SQL =)
     
  12. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    А кто нибудь проверяет запрос перед тем как сюда написать? :)

    Вот что получилось у меня
    Код (Text):
    1.  
    2. SELECT id_avto, COUNT(DISTINCT id) AS rec FROM Repairs GROUP BY id_avto ORDER BY rec DESC LIMIT 1
    Но нужен как раз таки набор записей, куда входит id_avto, который вернул этот запрос.

    Мне почему то уже начинает казаться что такого запроса существовать не может :)
     
  13. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Разобрался.
    В mysql-4.1.8 это не работает: #1111 - Invalid use of group function

    Но MSSQL все пашет, мне там и нужно было. :)

    Код (Text):
    1. SELECT * FROM repairs WHERE id_avto=(SELECT TOP 1 id_avto FROM repairs GROUP BY id_avto ORDER BY COUNT(DISTINCT id) DESC)
    Всем спасибо!