Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
Есть кейс заданий для собеседование, с первыми двумя справился успешно, а вот третье не дается ни в какую. сам текст задания. Необходимо написать запрос, результатом которого будет таблица с покупками всех клиентов, отсортированная в обратном хронологическом порядке. В этой таблице должны отобразиться только те покупки, на которые хватит кредита. Причем, в последней строке для каждого клиента должна быть указана не сумма покупки, а остаток кредита. Решение должно быть в рамках одного запроса, без курсоров и временных таблиц. Вводные: Код: sql 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. Результат запроса: UserId DT Name Purchase/Rest 1 2016-04-29 sku7 2.00 1 2016-04-24 sku1 5.00 1 2016-04-22 sku3 7.00 1 2016-04-19 sku2 6.00 1 2016-04-18 sku6 0.00 2 2016-04-29 sku7 2.00 2 2016-04-24 sku1 5.00 2 2016-04-22 sku3 7.00 2 2016-04-19 sku2 6.00 2 2016-04-18 sku5 4.00 2 2016-04-04 sku4 1.00 Вот до чего я дошел самостоятельно Код: sql 1. 2. 3. 4. 5. 6. 7. но как мне впихнуть в один столбец и значение цены и результат over в нужной строчке категорически непонятно. Сразу говорю, это мой первый опыт общения с T-SQl. Цель выполнения - исключительно саморазвитие.На данную должность не претендую. Настоятельно прошу готового решения не писать. просто натолкните на правильный путь. Заранее благодарю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 08:49 |
|
||
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
RapidSilverв последней строке для каждого клиента должна быть указана не сумма покупки, а остаток кредита.Т.е. тупо поле остатка кредита в структуре выходного набора. RapidSilverзапрос, результатом которого будет таблица с покупками всех клиентов, отсортированная в обратном хронологическом порядке.Ну тут ORDER BY без фантазий. RapidSilverВ этой таблице должны отобразиться только те покупки, на которые хватит кредита.Т.е. в указанном порядке нужно считать сумму с накоплением (ну, вернее, вычитать её из кредита, дабы получать сразу указанное выше значение поля остатка). Тут как раз и надобен SUM() OVER (). Партиция, само собой, по клиенту, порядок - указан, а границы - от начала (UNBOUNDED PRECEIDING) и до текущей записи (CURRENT RECORD). Всё это проделываем в WITH, чтобы потом тупо отбросить записи, в которых посчитанный остаток отрицателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 09:06 |
|
||
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
PS. Впрочем, особенность SUM(..) OVER (... ORDER BY ...) такова, что сумма сразу считается с накоплением, так что границы можно и не указывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 09:12 |
|
||
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
Код: sql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 09:16 |
|
||
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
aleks222 Код: sql 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. у вас получилось совсем не то что нужно. посмотрите в первом посте какого вида таблица должна получиться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 09:30 |
|
||
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
AkinaRapidSilverв последней строке для каждого клиента должна быть указана не сумма покупки, а остаток кредита.Т.е. тупо поле остатка кредита в структуре выходного набора. RapidSilverзапрос, результатом которого будет таблица с покупками всех клиентов, отсортированная в обратном хронологическом порядке.Ну тут ORDER BY без фантазий. RapidSilverВ этой таблице должны отобразиться только те покупки, на которые хватит кредита.Т.е. в указанном порядке нужно считать сумму с накоплением (ну, вернее, вычитать её из кредита, дабы получать сразу указанное выше значение поля остатка). Тут как раз и надобен SUM() OVER (). Партиция, само собой, по клиенту, порядок - указан, а границы - от начала (UNBOUNDED PRECEIDING) и до текущей записи (CURRENT RECORD). Всё это проделываем в WITH, чтобы потом тупо отбросить записи, в которых посчитанный остаток отрицателен. Все что вы написали я сделал. внимательно посмотрите на результат который должен получиться в последней колонке мы пишем цены за купленные товары. и только если на товаре не хватает кредита то вместо цены выдаем остаток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 09:33 |
|
||
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
RapidSilverесли на товаре не хватает кредита то вместо цены выдаем остаток.Ну для этого в WITH получаете два поля, отдельно получаете остатки, а в выходном наборе используете CASE для выбора того, что вывести - или цену, или остаток... делов-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 09:38 |
|
||
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
Akina, Теперь понял - пошел пробовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 09:42 |
|
||
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
RapidSilverу вас получилось совсем не то что нужно. посмотрите в первом посте какого вида таблица должна получиться :) Не смеши мой sql server. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 09:54 |
|
||
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
aleks222, это текст задания целиком - ответ тоже часть задания. вы сделали остаток кредита последним столбцом. а надо последней строкой по юзверю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 10:48 |
|
||
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
RapidSilveraleks222, это текст задания целиком - ответ тоже часть задания. вы сделали остаток кредита последним столбцом. а надо последней строкой по юзверю Вот и сделайте, это ваше задание, вообще... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 11:01 |
|
||
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
RapidSilver, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 11:06 |
|
||
|
Помогите разобраться с заданием по OVER
|
|||
|---|---|---|---|
|
#18+
О блин, ответ подъехал, а я как раз хотел выложить свой. сделал немного по другому Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Всем огромное человеческое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 11:44 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=115&tid=1688328]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 336ms |

| 0 / 0 |
