Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выбрать максимальную последовательность дат / 19 сообщений из 19, страница 1 из 1
20.10.2021, 13:50
    #40105588
andrewkochn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
Добрый день!

У меня есть следующая таблица:

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

Как проще переписать мой запрос, чтобы решить данную задачу?
...
Рейтинг: 0 / 0
20.10.2021, 14:49
    #40105614
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
andrewkochn
Как проще переписать мой запрос, чтобы решить данную задачу?
Полностью. Выбросить и написать с нуля.

В MS Access потребуется запрос, использующий как минимум 3 копии исходной таблицы.

PS. А за каким [censored] в источнике запроса мотается таблица user ?
...
Рейтинг: 0 / 0
20.10.2021, 15:14
    #40105619
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
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)
Поясните
По моему термин "подряд" подразумевает непрерывный ряд
...
Рейтинг: 0 / 0
20.10.2021, 15:18
    #40105620
andrewkochn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
Akina,

авторPS. А за каким [censored] в источнике запроса мотается таблица user?

Из таблицы users, бралось еще одно поле - email.
В данной задаче оно конечно не требуется и таблицу user из запроса можно убрать.

авторВ MS Access потребуется запрос, использующий как минимум 3 копии исходной таблицы.
Какова методика? Джойнить копии таблиц к друг другу?
...
Рейтинг: 0 / 0
20.10.2021, 15:21
    #40105621
andrewkochn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
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
...
Рейтинг: 0 / 0
20.10.2021, 15:37
    #40105625
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
Если в таблице нет дублирующихся записей, можно обойтись и 2 копиями.

Будет что-то вроде

Код: sql
1.
2.
3.
4.
5.
6.
SELECT MAX(t2.date - t1.date)
FROM ( SELECT t1.date, t2.date
       FROM table t1
       JOIN table t2 ON t1.date < t2.date
       GROUP BY t1.date, t2.date
       HAVING t2.date - t1.date = COUNT(*) - 1 ) AS subquery



Т.к. сперва составляем все пары дат. Потом отбираем только те, меж которых количество записей на 1 больше разности дат, т.е. нет пропущенных дат. Ну и во внешнем запросе находим максимальную длительность.

Условия соответствия и группировки добавь самостоятельно.
...
Рейтинг: 0 / 0
20.10.2021, 23:19
    #40105707
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
как вариант: с использованием функции:
для проверки добавлял\изменял записи таблицы-результат не такой как в Вашем сообщении,но верный
...
Рейтинг: 0 / 0
21.10.2021, 01:49
    #40105722
andrewkochn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
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 дня.
...
Рейтинг: 0 / 0
21.10.2021, 02:04
    #40105723
andrewkochn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
sdku,

Спасибо за вариант. Но требуется реализация именно на sql. Для меня это не типичная задача, поэтому возникли трудности.
...
Рейтинг: 0 / 0
21.10.2021, 07:49
    #40105733
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
andrewkochn
Попробовал выполнить ваш запрос. JOIN заменил на INNER JOIN, т.к. Access выводит ошибку ссылаясь на неправильный синтаксис FROM. Также не добавлял пока никакие условия и поля.
У Вас во внешнем запросе 3 выходных поля и группировка, которых у меня нет. Как это согласуется с последним предложением - я даже не представляю.
...
Рейтинг: 0 / 0
21.10.2021, 09:11
    #40105745
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
Выложите уже наконец нормальный пример БД. А то в воздухе пальцами вертеть можно долго - и безуспешно.

Скопируйте в отдельную БД таблицу с данными (~100 записей для ~3-4 пользователей и стольких же страниц). Зазипуйте и приложите к сообщению. Добавьте требуемые результаты для 2-3 различных условий отбора (например, отбор по пользователям или по диапазону дат) с соотв. пояснениями.
...
Рейтинг: 0 / 0
21.10.2021, 10:31
    #40105759
andrewkochn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
Akina
andrewkochn
Попробовал выполнить ваш запрос. JOIN заменил на INNER JOIN, т.к. Access выводит ошибку ссылаясь на неправильный синтаксис FROM. Также не добавлял пока никакие условия и поля.
У Вас во внешнем запросе 3 выходных поля и группировка, которых у меня нет. Как это согласуется с последним предложением - я даже не представляю.



Если сделать запрос в точности как у вас (изменив наименование полей), будет следующий результат:

Expr100011

Поэтому это особо ничего не меняет. Даты вывел для наглядности, чтобы понять к каким из них относится агрегация.
...
Рейтинг: 0 / 0
21.10.2021, 11:24
    #40105769
andrewkochn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
Akina
Выложите уже наконец нормальный пример БД. А то в воздухе пальцами вертеть можно долго - и безуспешно.

Скопируйте в отдельную БД таблицу с данными (~100 записей для ~3-4 пользователей и стольких же страниц). Зазипуйте и приложите к сообщению. Добавьте требуемые результаты для 2-3 различных условий отбора (например, отбор по пользователям или по диапазону дат) с соотв. пояснениями.



Нужно вывести наибольшее количество дней, которое пользователь просматривал одну и туже страницу подряд.
То есть человек смотрел страницу три дня подряд, потом перерыв, затем 5 дней подряд, то максимальным для него будет 5, не 8. Форма вывода user_id, page_id, days_cnt


В примере нет повторяющихся дат. Всего 5 пользователей и пять страниц.
Требуется вывести данные по всем пяти пользователям, в порядке убывания.
...
Рейтинг: 0 / 0
21.10.2021, 12:03
    #40105789
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
andrewkochn
Нужно вывести наибольшее количество дней, которое пользователь просматривал одну и туже страницу подряд.

нехватает, конешно, в Аксе аналит.функций ... (
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select
  t.user_id
  ,t.page_id
  ,min(t.created_at) as from_dt
  ,max(t.created_at) as to_dt
  ,count(*) as cnt_dt
from
  (SELECT t1.Код, t1.id, t1.created_at, t1.page_id, t1.user_id
      ,t1.created_at - (select count(*) from pageview t2 where t1.user_id=t2.user_id and t1.page_id=t2.page_id and t2.created_at<t1.created_at) as inv
  FROM pageview t1) t
group by
  t.user_id
  ,t.page_id  
  ,t.inv


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
...
Рейтинг: 0 / 0
21.10.2021, 14:37
    #40105837
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
andrewkochn
Нужно вывести наибольшее количество дней, которое пользователь просматривал одну и туже страницу подряд.
То есть человек смотрел страницу три дня подряд, потом перерыв, затем 5 дней подряд, то максимальным для него будет 5, не 8. Форма вывода user_id, page_id, days_cnt


надеюсь это абстрактный пример...
или вы делаете инструмент для вычисления даунов ?
... смотреть на страницу три дня подряд... это ж как обкуриться нужно...
...
Рейтинг: 0 / 0
21.10.2021, 14:45
    #40105844
andrewkochn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
court ,

Спасибо, данный запрос в принципе подойдет!

Akina , sdku благодарю вас также.
...
Рейтинг: 0 / 0
21.10.2021, 14:54
    #40105849
andrewkochn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
vmag ,

Пример конечно абстрактный.
Но ничего не мешает применять его в реальной аналитике, сделав отдельно таблицу календаря и переписав таблицу pageview.
Возьмем например страницу товара, если пользователь заходил на нее 10 дней подряд, вероятно он хочет его купить, соответственно ему можно предложить скидку на этот товар.
Речь идет про посещение страницы, а не нахождение на ней целые сутки подряд.
...
Рейтинг: 0 / 0
21.10.2021, 20:11
    #40106015
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
andrewkochn,

andrewkochn
Возьмем например страницу товара, если пользователь заходил на нее 10 дней подряд, вероятно он хочет его купить, соответственно ему можно предложить скидку на этот товар.


так то да, только наоборот, если страницу затирают глазами, то скидку делать не нужно - и так купят...
а вот если товаром даже не интересуются, то тут нужно уже думать...
...
Рейтинг: 0 / 0
22.10.2021, 12:22
    #40106119
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать максимальную последовательность дат
Я бы просто добавил в тбл. еще одно поле дата\время с заполнением при сохранении записи со значением: если разность между датой создания записи и датой последней (по дате или мах счетчику/если он последовательный/=1 день и page=page новой записи)задать значение дата предшествующей записи,иначе писать текущую дату.Имея в таблице это поле Вы извлечете любую интересующую информацию при помощи простых запросов на выборку(при необходимости с параметрами)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выбрать максимальную последовательность дат / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]