powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как получить столбец содержащий разницу
4 сообщений из 4, страница 1 из 1
Как получить столбец содержащий разницу
    #33120435
YuriF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице есть колонка, содержащая дату внесения записи в БД (regdate).
Требуется получить столбец (delta) с временными промежутками, прошедшими между внесением записей. То есть, он должен содержать разницу дат последовательных записей.

Если бы удалось ввести счетчик, возрастающий последовательно вместе с датой как отдельный столбец (counter), мне кажется помогло бы объединение таблицы с собой вроде такого:

SELECT t1.*, (TO_DAYS(DATE_SUB(t1.regdate, t2.regdate))) AS delta
FROM table AS t1, table AS t2
WHERE t1.counter = t2.counter -1 # здесь проблема: поля counter нет в таблице
...
Рейтинг: 0 / 0
Как получить столбец содержащий разницу
    #33121284
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Счётчик не нужен, да и так использовать, как ты указал - неверно.
2. Запрос по сути такой (если версия >=4.1) :

Код: plaintext
1.
2.
3.
4.
5.
SELECT T1.regdate-T2.regdate AS delta 
FROM Table T1, Table T2
WHERE (T1.regdate>=T2.regdate) AND 
  (T2.regdate=(SELECT MAX(T3.regdate) 
               FROM Table T3 
               WHERE T3.regdate<=T1.regdate))
...
Рейтинг: 0 / 0
Как получить столбец содержащий разницу
    #33122709
YuriF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Johnmen ,

На самом деле, в таблице хранятся записи для различных ID. Для каждого ID имеется много записей, в каждой из них - время её регистрации. Требовалось узнать статистику интервалов, с котороми производится регистрация в целом. (с интервалами по 15 минут)

Вот моё решение:

MySQL 4.0.18
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TEMPORARY TABLE res(
  id,
  cc BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, # № записи для этого ID
  time DATETIME, # время регистрации
  PRIMARY KEY (id,cc) # нужно для последовательной нумерации для каждого ID в отдельности
) TYPE=MYISAM;

INSERT INTO res (id, time)
SELECT id, time
FROM main_table
ORDER BY id, time; # сортировка по времени обязательна - в этом же порядке будут нумероваться строки
# после этого таблица res содержит пронумерованные записи (для каждого нового ID нумерация возобновляется с  1 )

# запрос статистики:
SELECT  15 *CEILING( ROUND( (UNIX_TIMESTAMP(T2.time)-UNIX_TIMESTAMP(T1.time))/ 60 ,  0  )/ 15 ) AS range,
COUNT(*) AS count
FROM res AS T1, res AS T2
WHERE T1.id = T2.id AND T1.cc = T2.cc -  1 
GROUP BY range

результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
range	count
15	15391
30	7181
45	481
60	30
75	13
...
...
Рейтинг: 0 / 0
Как получить столбец содержащий разницу
    #33122727
YuriF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
CREATE TEMPORARY TABLE res(
  id INT NOT NULL DEFAULT  0 ,
  ...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как получить столбец содержащий разницу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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