Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Вычислить для каждой строки, сколько дней подряд к этому моменту пользователь заходил в приложение. Существует таблица Пользователи, в которой хранятся ID пользователей и дата каждого захода в приложение. Необходимо написать запрос вычисляющий для каждой строки, сколько дней подряд к этому моменту пользователь заходил в приложение (первый вход считаем как 1 день подряд). Написала вот это: USE Useractivity SELECT UserActivity.Date, UserActivity.UserId, COUNT(Date) AS DaysInRow FROM UserActivity GROUP BY UserActivity.UserId, UserActivity.Date ORDER BY COUNT(Date)DESC а как осуществить сам подсчет не понимаю((( должно получится как то так: Date UserId DaysInRow 2014-10-01 2 1 2014-10-01 1 1 2014-10-02 1 2 2014-10-02 3 1 2014-10-03 1 3 2014-10-05 1 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2018, 19:58 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
cglcz, А какая версия у вас сервера? Если можете делать lag/lead то попробуйте так: партицируем по пользователям и сортируем по датам и там ищем разрывы в датах каждый непрерывный интервал нумеруем сплошной нумерацией делим по группам теперь и сортируем по датам и считаем сколько там срок на каждую дату Код: 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. зы. по граничным условиям не проверял. Было бы не плохо побольше тестовых данных иметь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2018, 23:25 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
PizzaPizza, вариант на разности row_number-ов будет и проще, и на большем числе версий SQL Server-а "взлетит" ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 04:43 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
PizzaPizzacglcz, А какая версия у вас сервера? Если можете делать lag/lead то попробуйте так: Код: sql 1. Но вот аналитическая накопительная сумма по любому будет требовать наличие MS SQL Server 2012 и выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 04:46 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, Спасибо. Попробую завтра. А то чувствую, что, тк недавно делал тяжёлый запрос на lagах, я застрял на них - не могу переключиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 06:17 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Версия сервера SSMS 2017 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 09:12 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
PizzaPizza, на ваших же тестовых данных: Код: 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. Для идентификации группы используется всего один row_number, вместо комбинации двух lag-ов с последующей накопительной sum()over(order by) по ним;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 10:44 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
PizzaPizza, но даже в случае с LAG-ом - вполне достаточно и одного... Код: 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. (внесенные мною изменения в коде - выделены цветом ;)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:34 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, Красиво. Причем я же начинал с одного лага в первом сте, но что то мне не понравилось... а потом начал добавлять строки в тестовые данные. Все же важно работать с правильным набором сразу. Отдельное спасибо за вариант с ROW_NUMBER - мне, как для не математика решение с помощью разницы возрастающих функций (наверное) не очевидно, но очень полезно как алгоритм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 21:02 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39725238&tid=1688866]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
80ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 422ms |

| 0 / 0 |
