|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
Добрый день! У меня есть следующая таблица: pageview - таблица просмотра страниц по пользователям Поле Тип Описаниеid int первичный ключcreated_at datetime время посещения страницы (dd.mm.yyyy)page_id int id страницыuser_id int id пользователя который просматривал страницу Пример данных в pageview: id created_at page_id user_id1 26.10.2010 3 12 27.10.2010 3 13 29.10.2010 3 14 30.10.2010 9 25 01.10.2010 2 46 02.10.2010 2 47 03.10.2010 4 48 05.10.2010 5 49 06.10.2010 8 910 07.10.2010 3 111 08.10.2010 7 512 09.10.2010 8 1113 09.10.2010 4 1614 14.10.2010 3 1 Я написал запрос, который выводит общее количество дней, которое пользователи просматривали страницу (таблицу user здесь не привожу, т.к. из нее берется, только id пользователя). SELECT pageview.user_id AS user_id, pageview.page_id as page_id, COUNT(pageview.creat_at) AS days_cnt FROM [user] INNER JOIN pageview ON user.[id]=pageview.[user_id] GROUP BY pageview.page_id, pageview.user_id ORDER BY COUNT(pageview.created_at) DESC По пользователю user_id=1 результат: user_id page_id days_cnt1 3 5 Всего 5 дней пользователь просматривал страницу. Задача: Нужно вывести наибольшее количество дней, которое пользователь просматривал одну и туже страницу подряд . В случае с user_id=1 он просматривал страницу максимально 3-и дня подряд 26.10.2010, 27.10.2010, 29.10.2010 Нужный результат (user_id=1): user_id page_id days_cnt1 3 3 Как проще переписать мой запрос, чтобы решить данную задачу? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2021, 13:50 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
andrewkochn Как проще переписать мой запрос, чтобы решить данную задачу? В MS Access потребуется запрос, использующий как минимум 3 копии исходной таблицы. PS. А за каким [censored] в источнике запроса мотается таблица user ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2021, 14:49 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
andrewkochn ... Задача: Нужно вывести наибольшее количество дней, которое пользователь просматривал одну и туже страницу подряд . В случае с user_id=1 он просматривал страницу максимально 3-и дня подряд 26.10.2010, 27.10.2010, 29.10.2010 .... 26.10.2010, 27.10.2010-это подряд 27.10.2010, 29.10.2010-а это не подряд(нет 28.10.2010-получается подряд только 2 дня-26.10.2010, 27.10.2010) Поясните По моему термин "подряд" подразумевает непрерывный ряд ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2021, 15:14 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
Akina, авторPS. А за каким [censored] в источнике запроса мотается таблица user? Из таблицы users, бралось еще одно поле - email. В данной задаче оно конечно не требуется и таблицу user из запроса можно убрать. авторВ MS Access потребуется запрос, использующий как минимум 3 копии исходной таблицы. Какова методика? Джойнить копии таблиц к друг другу? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2021, 15:18 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
sdku, sdkuА вот это не понял: 26.10.2010, 27.10.2010-это подряд 27.10.2010, 29.10.2010-а это не подряд(нет 28.10.2010-получается подряд только 2 дня-26.10.2010, 27.10.2010) Поясните Прошу прощения моя ошибка. Неудачно скопировал. Конечно 26.10.2010, 27.10.2010 и 28.10.2010 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2021, 15:21 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
Если в таблице нет дублирующихся записей, можно обойтись и 2 копиями. Будет что-то вроде Код: sql 1. 2. 3. 4. 5. 6.
Т.к. сперва составляем все пары дат. Потом отбираем только те, меж которых количество записей на 1 больше разности дат, т.е. нет пропущенных дат. Ну и во внешнем запросе находим максимальную длительность. Условия соответствия и группировки добавь самостоятельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2021, 15:37 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
как вариант: с использованием функции: для проверки добавлял\изменял записи таблицы-результат не такой как в Вашем сообщении,но верный ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2021, 23:19 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
Akina, Попробовал выполнить ваш запрос. JOIN заменил на INNER JOIN, т.к. Access выводит ошибку ссылаясь на неправильный синтаксис FROM. Также не добавлял пока никакие условия и поля. SELECT MAX(t2.created_at - t1.created_at), t2.created_at, t1.created_at FROM ( SELECT t1.created_at, t2.created_at FROM pageview t1 INNER JOIN pageview t2 ON t1.created_at < t2.created_at GROUP BY t1.created_at, t2.created_at HAVING t2.created_at - t1.created_at = COUNT(*) - 1 ) AS subquery GROUP BY t1.created_at, t2.created_at Взял такие данные для проверки: id created_at page_id user_id1 07.10.2021 3 22 08.10.2021 4 23 22.10.2021 1 14 24.10.2021 2 55 18.10.2021 10 16 28.10.2021 10 17 31.10.2021 5 78 11.10.2021 1 39 07.10.2021 6 110 02.10.2021 4 611 23.10.2021 10 112 01.10.2021 3 213 26.10.2021 4 514 29.09.2021 2 415 24.10.2021 10 116 12.10.2021 10 217 27.09.2021 4 318 20.10.2021 4 319 03.10.2021 1 4 Выводится следующий результат: Expr1000 t2.created_at t1.created_at1 08.10.2021 07.10.20211 24.10.2021 23.10.2021 Следующие даты не попадают в результат: 1) 11.10.2021,12.10.2021 2) 02.10.202, 03.10.2021 3) 22.10.2021,23.10.2021 4) 23.10.2021,24.10.2021 У всех пар максимальное количество дней равно 1-му. Хотя должно быть, если например диапазон 22.10.2021, 23.10.2021, 24.10.2021 - 3 дня. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 01:49 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
sdku, Спасибо за вариант. Но требуется реализация именно на sql. Для меня это не типичная задача, поэтому возникли трудности. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 02:04 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
andrewkochn Попробовал выполнить ваш запрос. JOIN заменил на INNER JOIN, т.к. Access выводит ошибку ссылаясь на неправильный синтаксис FROM. Также не добавлял пока никакие условия и поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 07:49 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
Выложите уже наконец нормальный пример БД. А то в воздухе пальцами вертеть можно долго - и безуспешно. Скопируйте в отдельную БД таблицу с данными (~100 записей для ~3-4 пользователей и стольких же страниц). Зазипуйте и приложите к сообщению. Добавьте требуемые результаты для 2-3 различных условий отбора (например, отбор по пользователям или по диапазону дат) с соотв. пояснениями. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 09:11 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
Akina andrewkochn Попробовал выполнить ваш запрос. JOIN заменил на INNER JOIN, т.к. Access выводит ошибку ссылаясь на неправильный синтаксис FROM. Также не добавлял пока никакие условия и поля. Если сделать запрос в точности как у вас (изменив наименование полей), будет следующий результат: Expr100011 Поэтому это особо ничего не меняет. Даты вывел для наглядности, чтобы понять к каким из них относится агрегация. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 10:31 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
Akina Выложите уже наконец нормальный пример БД. А то в воздухе пальцами вертеть можно долго - и безуспешно. Скопируйте в отдельную БД таблицу с данными (~100 записей для ~3-4 пользователей и стольких же страниц). Зазипуйте и приложите к сообщению. Добавьте требуемые результаты для 2-3 различных условий отбора (например, отбор по пользователям или по диапазону дат) с соотв. пояснениями. Нужно вывести наибольшее количество дней, которое пользователь просматривал одну и туже страницу подряд. То есть человек смотрел страницу три дня подряд, потом перерыв, затем 5 дней подряд, то максимальным для него будет 5, не 8. Форма вывода user_id, page_id, days_cnt В примере нет повторяющихся дат. Всего 5 пользователей и пять страниц. Требуется вывести данные по всем пяти пользователям, в порядке убывания. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 11:24 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
andrewkochn Нужно вывести наибольшее количество дней, которое пользователь просматривал одну и туже страницу подряд. нехватает, конешно, в Аксе аналит.функций ... ( Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
user_idpage_idfrom_dtto_dtcnt_dt1218.11.202118.11.202111227.11.202127.11.202111317.11.202117.11.202111412.09.202112.09.202111530.11.202130.11.202112101.09.202103.09.202132130.09.202130.09.202112201.10.202101.10.202112222.10.202122.10.202112203.11.202103.11.202112315.10.202118.10.202142403.10.202103.10.202112425.11.202125.11.202113209.09.202109.09.202113219.10.202120.10.202123224.10.202124.10.202113411.09.202111.09.202113404.10.202104.10.202113426.10.202126.10.202113523.11.202123.11.202114105.09.202107.09.202134131.10.202131.10.202114205.11.202106.11.202125413.09.202115.09.202135422.09.202122.09.20211 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 12:03 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
andrewkochn Нужно вывести наибольшее количество дней, которое пользователь просматривал одну и туже страницу подряд. То есть человек смотрел страницу три дня подряд, потом перерыв, затем 5 дней подряд, то максимальным для него будет 5, не 8. Форма вывода user_id, page_id, days_cnt надеюсь это абстрактный пример... или вы делаете инструмент для вычисления даунов ? ... смотреть на страницу три дня подряд... это ж как обкуриться нужно... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:37 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
court , Спасибо, данный запрос в принципе подойдет! Akina , sdku благодарю вас также. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:45 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
vmag , Пример конечно абстрактный. Но ничего не мешает применять его в реальной аналитике, сделав отдельно таблицу календаря и переписав таблицу pageview. Возьмем например страницу товара, если пользователь заходил на нее 10 дней подряд, вероятно он хочет его купить, соответственно ему можно предложить скидку на этот товар. Речь идет про посещение страницы, а не нахождение на ней целые сутки подряд. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:54 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
andrewkochn, andrewkochn Возьмем например страницу товара, если пользователь заходил на нее 10 дней подряд, вероятно он хочет его купить, соответственно ему можно предложить скидку на этот товар. так то да, только наоборот, если страницу затирают глазами, то скидку делать не нужно - и так купят... а вот если товаром даже не интересуются, то тут нужно уже думать... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 20:11 |
|
Выбрать максимальную последовательность дат
|
|||
---|---|---|---|
#18+
Я бы просто добавил в тбл. еще одно поле дата\время с заполнением при сохранении записи со значением: если разность между датой создания записи и датой последней (по дате или мах счетчику/если он последовательный/=1 день и page=page новой записи)задать значение дата предшествующей записи,иначе писать текущую дату.Имея в таблице это поле Вы извлечете любую интересующую информацию при помощи простых запросов на выборку(при необходимости с параметрами) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2021, 12:22 |
|
|
start [/forum/topic.php?fid=45&msg=40105759&tid=1609570]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 249ms |
total: | 392ms |
0 / 0 |