powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на получение разницы между текущим и следующим значением
21 сообщений из 21, страница 1 из 1
Запрос на получение разницы между текущим и следующим значением
    #39238741
Сева Новгородцев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите написать запрос на получение разницы между текущим и следующим значением поля типа времени. Имеется таблица логов, вида ID, Время, Пользователь, Сообщение. Хотел бы получить запрос Время1 - Время2, Пользователь, Сообщение. Для этого, нашёл как пронумеровать результаты запроса (с помощью функции Numeration). Дальше стопорнул...
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39238749
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли в таблице полные дубликаты по совокупности полей (Время, Пользователь)? как я понимаю, разницу по времени нужно для каждого отдельного пользователя... если же нет - то есть ли в таблице полные дубликаты по полю Время?
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39238756
Сева Новгородцев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, полных дубликатов нет. Разницу по времени необходимо получить вида:
[10:07 AM] User1 00:04
[10:11 AM] User2 00:33
[10:44 AM] User3 00:01
[10:45 AM] User1 00:00
[10:45 AM] User3 00:01
[10:46 AM] User2 00:01
[10:47 AM] User2 00:01
[10:49 AM] User1 00:02

Дубликаты могут быть (10:45 AM)
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39238770
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сева Новгородцев , разность надо считать, невзирая на пользователя, или по каждому отдельно?
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39238771
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, если дубликаты есть, это уже неважно - нумерация должна выполняться с учётом этого требования.
Теперь берите две копии нумерующего запроса, и связывайте их по table1.number = table2.number-1.
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39238818
Сева Новгородцев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, не поправите:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT t1.Num,  t2.Time2 -  t1.Time1 As ResponseTime,  t1.User,  t1.Message
FROM 
(
SELECT DISTINCT Numeration(ID) AS Num, All_Logs.[Response time] As Time1, All_Logs.User As User, All_Logs.Message As Message
FROM All_Logs AS t1 
)
INNER JOIN (

SELECT DISTINCT Numeration(ID) AS Num, All_Logs.[Response time] As Time2
FROM All_Logs )

AS t2 ON t1.Num = t2.Num - 1


WHERE (((Numeration())=0))
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39238871
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может так?
Код: sql
1.
2.
3.
SELECT t1.[User], Format(t1.[Response time],"hh:nn"), FIRST(DATEDIFF("s",t1.[Response time],t2.[Response time]))
FROM All_Logs t1 LEFT JOIN All_Logs t2 ON (t1.[Numeration(ID)]=t2.[Numeration(ID)]-1)
GROUP BY t1.[User], Format(t1.[Response time],"hh:nn")



П.С. Ну и названия полей у Вас..
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239167
Сева Новгородцев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Agapov_stas, спасибо за попытку. Требует параметр t1.Numeration(ID) и t2.Numeration(ID).
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239171
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сева Новгородцевне поправите
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT t1.Num
     , t2.Time2 -  t1.Time1 As ResponseTime
     , t1.User
     , t1.Message
FROM 
(
    SELECT DISTINCT Numeration(ID) AS Num
                  , AL1.[Response time] As Time1
                  , AL1.User As User
                  , AL1.Message As Message
    FROM All_Logs AS AL1 
) AS t1
INNER JOIN 
(
    SELECT DISTINCT Numeration(ID) AS Num
                  , AL2.[Response time] As Time2
    FROM All_Logs AS AL2
) AS t2 ON t1.Num = t2.Num - 1
WHERE Numeration()=0
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239174
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда, я не понимаю, почему в подзапросах отсутствует сортировка... хотя это зависит от того, что заложено в функцию Numeration().
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239175
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сева Новгородцев , это все Ваши названия полей. Numeration(ID) - это id,number, уникальный идентификатор или что там у Вас и как в таблице, Вам виднее.
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239181
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё - я бы для нумерации использовал не функцию, а простенький запрос типа
Код: vbnet
1.
2.
3.
4.
SELECT t1.field1, ... , t1.fieldN, COUNT(t2.ID) AS number
FROM table t1, table t2
WHERE t1.orderfield >t2.orderfield
GROUP BY t1.field1, ... , t1.fieldN


И оформил бы его статическим запросом, если таблица не очень велика - всё равно результат будет кэшиться, а так по крайней мере подзапрос выполнится гарантированно один раз.
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239183
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, во WHERE должно быть ">=".
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239188
Сева Новгородцев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT t1.Num
     , t2.Time2 -  t1.Time1 As ResponseTime
     , t1.User
     , t1.Message
FROM 
(
    SELECT DISTINCT Numeration(ID) AS Num
                  , AL1.[Response time] As Time1
                  , AL1.User As User
                  , AL1.Message As Message
    FROM All_Logs AS AL1 
) AS t1
INNER JOIN 
(
    SELECT DISTINCT Numeration(ID) AS Num
                  , AL2.[Response time] As Time2
    FROM All_Logs AS AL2
) AS t2 ON t1.Num = t2.Num - 1
WHERE Numeration()=0


не выдаёт ни ошибок, ни данных.
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239192
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сева Новгородцев , за логику запроса я ещё могу отвечать, а вот за работу неизвестной мне функции - нет.
Думаю, что она написана через задницу, и во втором подзапросе не начинает нумерацию заново, а продолжает её.
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239200
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не много не догоняю. скорее всего. Зачем нумерация, если изначально ТЗ звучит с такими полями как "ID, Время, Пользователь, Сообщение", где ID, я так понимаю, тот самый уникальный последовательный счетчик. Так почему его не использовать?
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239220
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Agapov_stasЗачем нумерация, если изначально ТЗ звучит с такими полями как "ID, Время, Пользователь, Сообщение", где ID, я так понимаю, тот самый уникальный последовательный счетчик.
Просто представь себе, что это реплика БД...
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239223
Сева Новгородцев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Agapov_stasЯ не много не догоняю. скорее всего. Зачем нумерация, если изначально ТЗ звучит с такими полями как "ID, Время, Пользователь, Сообщение", где ID, я так понимаю, тот самый уникальный последовательный счетчик. Так почему его не использовать?
Перестраховался на всякий случай. Вдруг какие-то записи будут удалены.
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239227
Сева Новгородцев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina Сева Новгородцев , за логику запроса я ещё могу отвечать, а вот за работу неизвестной мне функции - нет.
Думаю, что она написана через задницу, и во втором подзапросе не начинает нумерацию заново, а продолжает её.

Вы были правы! Именно из-за этого.
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239267
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сева НовгородцевИменно из-за этого.
В таком случае её надо переписывать. Даже перенос инициализации в подзапросы может не сработать - они могут выполняться и параллельно... разве что добавить дополнительный параметр и соответственно увеличить количество статических/глобальных переменных-счётчиков.
Но лучше всё-таки обойтись запросом типа 19194045 .
...
Рейтинг: 0 / 0
Запрос на получение разницы между текущим и следующим значением
    #39239509
Сева Новгородцев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, согласен. Это правильный вариант. А я обошёлся костылём. Скопировал эту же функцию под другим именем. В первом случае вызываю исходную функцию, во втором - копию.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на получение разницы между текущим и следующим значением
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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