Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
Условия решения: - нельзя использовать cursor-ы и цикл while; - можно использовать temporary tables в неограниченном количестве. Тест 1. ----------- Дается таблица "create table a (userid int,date0 datetime)". Запрос "select * from a" приносит результат: userid date0 ----------- ----------------------- 300 2009-08-19 17:38:11.790 300 2009-08-19 17:38:11.790 300 2009-08-19 17:38:11.790 300 2009-08-19 17:38:11.790 300 2009-08-19 17:38:11.790 302 2009-08-19 17:38:11.790 302 2009-08-19 17:38:11.790 302 2009-08-19 17:38:11.790 303 2009-08-19 17:38:11.790 303 2009-08-19 17:38:11.790 Надо пронумеровать записи врутри каждого значения поля "userid", т.е. добиться следующего результата: userid date0 id-num --------- ---------------------------- ----------- 300 2009-08-19 17:38:11.790 1 300 2009-08-19 17:38:11.790 2 300 2009-08-19 17:38:11.790 3 300 2009-08-19 17:38:11.790 4 300 2009-08-19 17:38:11.790 5 302 2009-08-19 17:38:11.790 1 302 2009-08-19 17:38:11.790 2 302 2009-08-19 17:38:11.790 3 303 2009-08-19 17:38:11.790 1 303 2009-08-19 17:38:11.790 2 Тест 2. --------- Дается таблица "create table b (userid int,date2 datetime,count2 int )". Запрос "select * from b" приносит результат: userid date2 count2 --------- ------------------------- ----------- 300 2009-01-01 18:08:41.270 5 300 2009-01-02 18:08:41.270 6 300 2009-01-09 18:08:41.270 45 300 2009-01-10 18:08:41.270 35 302 2009-01-17 18:08:41.270 50 302 2009-01-18 18:08:41.270 8 302 2009-01-03 18:08:41.270 84 302 2009-01-05 18:08:41.270 24 Надо просуммировать значения поля "count2" для каждого 8-ми дневного периода, исходя из значений поля "period", внутри каждого значения поля "userid" в предложенной ниже форме, т.е. добиться следующего результата: userid period count2 --------- ------------------------- ----------- 300 2009-01-01 - 2009-01-08 11 300 2009-01-09 - 2009-01-16 80 302 2009-01-01 - 2009-01-08 108 302 2009-01-16 - 2009-01-25 58 Примечание: для примера я взял только два значения поля "userid" для трех первых 8-ми дневных периодов года, а в задание имелось в виду неограниченное количество значений поля "userid" для всех 8-ми дневных периодов года. Прошу уважаемых коллег предлагать свои решения вышеуказанных тестов. Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 23:38 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
Поскольку при переносе модератором формат исходного текста изменился, я привожу текст в исходном, на мой взгляд, более понятном для прочтения формате. Условия решения: - нельзя использовать cursor-ы и цикл while; - можно использовать temporary tables в неограниченном количестве. Тест 1. ----------- Дается таблица "create table a (userid int,date0 datetime)". Запрос "select * from a" приносит результат: userid date0 ----------- ----------------------- 300 2009-08-19 17:38:11.790 300 2009-08-19 17:38:11.790 300 2009-08-19 17:38:11.790 300 2009-08-19 17:38:11.790 300 2009-08-19 17:38:11.790 302 2009-08-19 17:38:11.790 302 2009-08-19 17:38:11.790 302 2009-08-19 17:38:11.790 303 2009-08-19 17:38:11.790 303 2009-08-19 17:38:11.790 Надо пронумеровать записи внутри каждого значения поля "userid", т.е. добиться следующего результата: userid date0 id-num --------- ---------------------------- ----------- 300 2009-08-19 17:38:11.790 1 300 2009-08-19 17:38:11.790 2 300 2009-08-19 17:38:11.790 3 300 2009-08-19 17:38:11.790 4 300 2009-08-19 17:38:11.790 5 302 2009-08-19 17:38:11.790 1 302 2009-08-19 17:38:11.790 2 302 2009-08-19 17:38:11.790 3 303 2009-08-19 17:38:11.790 1 303 2009-08-19 17:38:11.790 2 Тест 2. --------- Дается таблица "create table b (userid int,date2 datetime,count2 int )". Запрос "select * from b" приносит результат: userid date2 count2 --------- ------------------------- ----------- 300 2009-01-01 18:08:41.270 5 300 2009-01-02 18:08:41.270 6 300 2009-01-09 18:08:41.270 45 300 2009-01-10 18:08:41.270 35 302 2009-01-17 18:08:41.270 50 302 2009-01-18 18:08:41.270 8 302 2009-01-03 18:08:41.270 84 302 2009-01-05 18:08:41.270 24 Надо просуммировать значения поля "count2" для каждого 8-ми дневного периода, исходя из значений поля "period", внутри каждого значения поля "userid" в предложенной ниже форме, т.е. добиться следующего результата: userid period count2 --------- ------------------------- ----------- 300 2009-01-01 - 2009-01-08 11 300 2009-01-09 - 2009-01-16 80 302 2009-01-01 - 2009-01-08 108 302 2009-01-16 - 2009-01-25 58 Примечание: для примера я взял только два значения поля "userid" для трех первых 8-ми дневных периодов года, а в задание имелось в виду неограниченное количество значений поля "userid" для всех 8-ми дневных периодов года. Прошу уважаемых коллег предлагать свои решения вышеуказанных тестов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 23:50 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
Лимон А зачем? Задачи то элементарные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2009, 08:30 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
--__Александр__--, Я первую не знаю пока как решить, а вторую решил чересчур громоздко, используя 4 temporary tables, поэтому надеюсь увидеть решения коллег. Вот Вы, например, знаете как решить эти элементарнне задачи, поэтому я прошу Вас написать Ваши решения здесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2009, 16:37 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
Лимон, Тест 1 Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2009, 11:50 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
bs600, спасибо, но я забыл написать, что тест проводился на SQL Server 2000, а не на SQL Server 2005, и поэтому надо было сделать симуляцию функции "row_number() over(partition by userid order by userid)" для SQL Server 2000. У меня такая симуляция не получилась. Может быть кто-то подскажет как просимулировать функцию "row_number() over(partition by userid order by userid)" в SQL Server 2000 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2009, 17:06 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2009, 18:02 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
Извините за офтоп, но, для чего "Модератор: Тема перенесена из форума "Microsoft SQL Server"." ? Какое отношение она имеет к сертификации? А на форуме "Microsoft SQL Server" обитает значительно больше спецов по этой теме! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2009, 18:07 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
iiyama, спасибо большое за решение Тест 1. может быть кто-то из коллег даст свое решение Тест 2 ? Тест 2. --------- Дается таблица "create table b (userid int,date2 datetime,count2 int )". Запрос "select * from b" приносит результат: userid date2 count2 --------- ------------------------- ----------- 300 2009-01-01 18:08:41.270 5 300 2009-01-02 18:08:41.270 6 300 2009-01-09 18:08:41.270 45 300 2009-01-10 18:08:41.270 35 302 2009-01-17 18:08:41.270 50 302 2009-01-18 18:08:41.270 8 302 2009-01-03 18:08:41.270 84 302 2009-01-05 18:08:41.270 24 Надо просуммировать значения поля "count2" для каждого 8-ми дневного периода, исходя из значений поля "period", внутри каждого значения поля "userid" в предложенной ниже форме, т.е. добиться следующего результата: userid period count2 --------- ------------------------- ----------- 300 2009-01-01 - 2009-01-08 11 300 2009-01-09 - 2009-01-16 80 302 2009-01-01 - 2009-01-08 108 302 2009-01-16 - 2009-01-25 58 Примечание: для примера я взял только два значения поля "userid" для трех первых 8-ми дневных периодов года, а в задание имелось в виду неограниченное количество значений поля "userid" для всех 8-ми дневных периодов года. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2009, 20:54 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
bsrИзвините за офтоп, но, для чего "Модератор: Тема перенесена из форума "Microsoft SQL Server"." ? Какое отношение она имеет к сертификации? А на форуме "Microsoft SQL Server" обитает значительно больше спецов по этой теме!может быть сертификационные тесты содержат такие задачи ? тогда интересно было бы найти в инете такие задачки. может быть кто-то подскажет где искать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2009, 20:57 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
Где можно узнать о курсах по SQL Server BI / OLАP (SSIS, SSAS и т.п.) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2009, 18:52 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
Лимон Начните решать задачки с sql-ex.ru. Решив первую сотню - на собеседовании будете щелкать все задачки как орешки. Лимон Где можно узнать о курсах по SQL Server BI / OLАP (SSIS, SSAS и т.п.) А что вам хочется узнать? Примерный план действий: -Заходите на сайт мелкомягких -Смотрите, какую литературу рекомендуют к каждому курсу. -Качаете тренинг киты + книжки и читаете их. По пункту Задаче 2. Идея решения: -Генерите восьмидневные интервалы (делается с помощью cross join и последовательности натуральных чисел) -Получате таблицу вида: 2009-01-01 - 2009-01-08 2009-01-09 - 2009-01-16 2009-01-17 - 2009-01-25 .................................. -Дальше простой джойн и группировка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2009, 14:12 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
--__Александр__--Лимон Начните решать задачки с sql-ex.ru. Решив первую сотню - на собеседовании будете щелкать все задачки как орешки.Вы имеете в виду "Start testing" здесь http://sql-ex.ru/tsql/index.php ? --__Александр__--По пункту Задаче 2. Идея решения: -Генерите восьмидневные интервалы (делается с помощью cross join и последовательности натуральных чисел) -Получате таблицу вида: 2009-01-01 - 2009-01-08 2009-01-09 - 2009-01-16 2009-01-17 - 2009-01-25 .................................. -Дальше простой джойн и группировка.Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2009, 18:44 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
Лимон, Варинат решения для задачи 2 без исп. временных таблиц declare @df as datetime set @df = '01.01.2009' select userid, CONVERT(varchar(10), DATEADD(dd, CEILING(DATEDIFF(dd, @df, date2)/8)*8,@df),104) + ' - ' + CONVERT(varchar(10),DATEADD(dd, CEILING(DATEDIFF(dd, @df, date2)/8)*8 + 8,@df),104) as period, SUM(count2) as sumcount from b group by userid,CEILING(DATEDIFF(dd, @df, date2)/8 ) order by userid ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2009, 17:35 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
guest-01Лимон, Варинат решения для задачи 2 без исп. временных таблиц declare @df as datetime set @df = '01.01.2009' select userid, CONVERT(varchar(10), DATEADD(dd, CEILING(DATEDIFF(dd, @df, date2)/8)*8,@df),104) + ' - ' + CONVERT(varchar(10),DATEADD(dd, CEILING(DATEDIFF(dd, @df, date2)/8)*8 + 8,@df),104) as period, SUM(count2) as sumcount from b group by userid,CEILING(DATEDIFF(dd, @df, date2)/8 ) order by useridguest-01, спасибо. Тест 3. Как можно дизайнировать одну или две таблицы, содержащие информацию о дереве всех директорий и под-директорий на Windows компьютере, что эффективно запрашивать: - все отцовские директории всех вышестоящих уровней для данной под-директории ? - все дочернии под-директории всех нижестоящих уровней для данной директории ? И каковы примеры наиболее эффективных запросов приносящих требуемую информацию ? Реализовать эту задачку надо средствами SQL Server 2005. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2009, 08:27 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
Ну и мое решение в копилку ) Тест1 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2009, 23:08 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
sanfrancisco, cпасибо. Использование рекурсии - это интересное решение. А может быть Вы предложите решение с использованием рекурсии для Теста 3. Как можно дизайнировать одну или две таблицы, содержащие информацию о дереве всех директорий и под-директорий на Windows компьютере, что эффективно запрашивать: - все отцовские директории всех вышестоящих уровней для данной под-директории ? - все дочернии под-директории всех нижестоящих уровней для данной директории ? И каковы примеры наиболее эффективных запросов приносящих требуемую информацию ? Я предлагаю сдедующее решение для дизайна : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. при этом sondir.id и prntdir.id должны совпадать, а для корневых директорий типа 'c:\' совпадают также sondir.id и sondir.prntid. как, например, в следующем примере: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. Вот запрос, который разворачивает все дерево: Код: plaintext 1. 2. 3. 4. 5. 6. 7. А как построить запросы, которые пинесут из этих двух таблиц: - все отцовские директории всех вышестоящих уровней для данной под-директории ? - все дочернии под-директории всех нижестоящих уровней для данной директории ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2009, 23:47 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
Лимон, Тест 3. Посмотрите bol по CTE (WITH). Там есть пример на основе AdventureWorks с применением рекурсии. Там вяжется Сотрудник список его подчиненных (если мне не изменяет память). Переложите этот пример на вашу задачу. Ну и есть стандартный подход к реализации таких древовидных структур. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 19:00 |
|
||
|
Тесты по Transact-SQL на интервью для пиема на работу
|
|||
|---|---|---|---|
|
#18+
Первая задача: create table #t (userid int,date0 datetime, id int identity) insert #t (userid, date0) select userid, date0 from a select *, (select count(1) + 1 from #t t2 where t1.userid = t2.userid and t1.id>t2.id) as ord from #t t1 order by userid, ord drop table #t Вторая задача: select userid, convert(varchar(100), dateadd(day, g.diff * 8, g.min_date), 4) + ' - ' + convert(varchar(100), dateadd(day, g.diff * 8 + 7, g.min_date), 4), sum(count2) as count2 from b join ( select cast(datediff(day, m.min_date, date2)/8 as int) as diff, m.min_date from b, (select min(date2) as min_date from b) m group by cast(datediff(day, m.min_date, date2)/8 as int), m.min_date ) g on cast(datediff(day, g.min_date, date2)/8 as int) = g.diff group by userid, g.diff, g.min_date order by userid, diff go ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2011, 16:33 |
|
||
|
|

start [/forum/topic.php?fid=34&tid=1550263]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 263ms |
| total: | 446ms |

| 0 / 0 |
