powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выбрать максимальную последовательность дат
19 сообщений из 19, страница 1 из 1
Выбрать максимальную последовательность дат
    #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
Выбрать максимальную последовательность дат
    #40105614
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrewkochn
Как проще переписать мой запрос, чтобы решить данную задачу?
Полностью. Выбросить и написать с нуля.

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

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

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

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

авторВ MS Access потребуется запрос, использующий как минимум 3 копии исходной таблицы.
Какова методика? Джойнить копии таблиц к друг другу?
...
Рейтинг: 0 / 0
Выбрать максимальную последовательность дат
    #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
Выбрать максимальную последовательность дат
    #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
Выбрать максимальную последовательность дат
    #40105707
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как вариант: с использованием функции:
для проверки добавлял\изменял записи таблицы-результат не такой как в Вашем сообщении,но верный
...
Рейтинг: 0 / 0
Выбрать максимальную последовательность дат
    #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
Выбрать максимальную последовательность дат
    #40105723
andrewkochn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

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

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



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

Expr100011

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

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



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


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


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

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

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

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

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


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


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