Задачка по SQL
Есть таблица Т с одним численным полем F. Нужно написать запрос на ANSI SQL, который бы возвращал n — ое максимальное значение.
Например имеем значения в таблице: 1, 2, 3, 4, 5, и n = 2. Результат — 4.
Есть идеи как решить?
Есть таблица Т с одним численным полем F. Нужно написать запрос на ANSI SQL, который бы возвращал n — ое максимальное значение.
Например имеем значения в таблице: 1, 2, 3, 4, 5, и n = 2. Результат — 4.
Есть идеи как решить?
Ну, а если тебе нужно найти lock-free алгоритм для конкретной операции и архитектуры, наверное можно что-то нагуглить.
идея очень проста — свести все к операции которая изменит состоянии системы за 1 такт процессора, а таких много:) например инкрементация инта (хотя для Java я бы сперва проверил, но сложно предположить какие дополнительные инструкции можно придумать для такой простой команды:))
Если использовать умный указатель с подсчетом ссылок, то я не вижу где там может случится краш.
ПыСы — это очень простая задача, просто я мало видел нормальной реализации, может хоть тут мы ее запечатлеем:)
Думаю что задача непростая, и имеет множество стратегий решения, каждая из которых является компромисом с каким нибудь фактором (производительность, целостность). Тот же optimistic locking имеет вполне осязаемые недостатки.
если речь идет об умных указателях, то там операция выполняеться не за 1 такт процессора и это тоже может повлечь краш
ПыСы — это очень простая задача, просто я мало видел нормальной реализации, может хоть тут мы ее запечатлеем:)
ок, возьмем optimistic locking, как вы бы реализовали его камит:) ведь нужно перенести данные из обьекта сткрытого от пользователя к тому который активно им используеться?
Вообще вопрос конечно поставлен очень обще.
примером может выступить любой сервер, в нем есть кучу структур которые отражают состояние, и часть пользователей его модифицируют, часть читают.
А можешь в двух словах описать свое видение этой проблемы, потому что почитав википедию, я так и не понял на какой вопрос нужно отвечать?
Ok:) в ответ могу предложить задачку с промышленым смыслом: попробывать решить Readers-writers problem без обьектов синхронизации, я думаю какой в этом промышленый смысл в высоко нагруженых системах и так ясно:) решение я знаю, может быть у вас есть свое и оно интереснее
Я бы на собеседованиях не давал, но встречал подобное.
Я встретил эту задачку на одном форуме, и честно говоря не додумался до твоего решения, но мне было интересно как она решается.
у меня только один вопрос:) зачем это? для собеседований на логику слабовато, так как задача контектно-зависимая (знания SQL) для проверок знаний СУБД тож глухо, больше нужны люди которые план умеют читать, индексы правильно строить и нормализацию делать итд...
конечно можно рассмотреть случаи когда цифры повторяються, но идея таже
С синтаксисом SQL знаком плохо.
SELECT < n-ю строку> F FROM (SELECT DISTINCT F FROM T ORDER BY F DESC)
вся соль в том, как сделать SELECT < n-ю строку> с указанными ограничениями:)
у меня наводящие вопросы:1. один
1. это должен быть один запрос или можно скоп
2. можно ли использовать переменые
3. можно ли использовать временые таблицы, вьюхи итд...
4. что есть приоритет в этой задаче? (скорость, размер кода, оригинальность...)
4. без приоритетов. просто решение, удовлетворяющее условиям.
SELECT < n-ю строку> F FROM (SELECT DISTINCT F FROM T ORDER BY F DESC)
4. что есть приоритет в этой задаче? (скорость, размер кода, оригинальность...)
А твое какое решение?
OK. А теперь сделаем задачку интересней. Условие то же, но пользоваться вещами типа: OFFSET, FETCH FIRST, ROW_NUMBER (), OVER, LIMIT, TOP, SKIP, FIRST и т.д. — то есть всем тем, что описано по ссылке gonzo нельзя.:)
а какая СУБД? ато что-то варианты для Oracle и MS SQL там выглядят староватенько
26 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів