|
|
|
Создание "пары" близжайших строк удовлетворяющих условию
|
|||
|---|---|---|---|
|
#18+
Имеются логи содержащие такие столбцы: Date | Action и прочие, но интересуют только эти В первом записывается время и дата. Date - содержит время старта либо время финиша либо время выполнения какого то этапа. Action - хранит инфу о том что выполнялось в данный момент времени(начал запрос, выполнял этап, закончил запрос) Как можно сгруппировать пары старт-финиш(считая что парой считается такие start и finish время между которыми минимальное) для дальнейшего нахождения дельты(времени выполнения текущего запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2017, 07:18 |
|
||
|
Создание "пары" близжайших строк удовлетворяющих условию
|
|||
|---|---|---|---|
|
#18+
Ответ хочешь тоже в эпистолярном жанре? AmKad как следует задавать вопросы по sql STFF start_of_group, match_recognize ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2017, 07:47 |
|
||
|
Создание "пары" близжайших строк удовлетворяющих условию
|
|||
|---|---|---|---|
|
#18+
Set_xx, Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2017, 15:48 |
|
||
|
Создание "пары" близжайших строк удовлетворяющих условию
|
|||
|---|---|---|---|
|
#18+
Set_xx, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 08:56 |
|
||
|
Создание "пары" близжайших строк удовлетворяющих условию
|
|||
|---|---|---|---|
|
#18+
небольшой апдейт, по поводу замечания в первом ответе: имеется бд с логами, логи имеют колонки: log_date log_action и другие, эти две являются "якорями" для проведения дальнейших вычислений, остальные поля при данной выборке роли не играют. авторlog_date | log_action 27.02.2017 00:00:00.805000 | start of process 27.02.2017 00:00:00.815000 | calculcation 27.02.2017 00:00:00.815000 | end of process 27.02.2017 00:00:00.825000 | start of process 27.02.2017 00:00:00.825000 | calculcation 27.02.2017 00:00:00.835000 | calculcation 27.02.2017 00:00:00.835500 | end of process 27.02.2017 00:00:00.845000 | start of process 27.02.2017 00:00:00.855000 | calculcation ... 27.02.2017 00:00:00.865000 | calculcation 27.02.2017 00:00:00.875000 | start of process 27.02.2017 00:00:00.885000 | end of process Мне необходимо взять за факт что ближний к "старту" "финиш" является парой, и в дальнейшем про создании запроса необходимо будет вывести время выполнения данного процесса, т.е delta(finish-start) = time_of_proc С sql начал ознакомление только недавно, читаю литературу, но еще "не дошло" как реализовать данный запрос. Пытался "выбросить" из исходных данных "calculation" и получался список чередований start, finish в дальнейшем разделил их на 2 таблицы и "присоединить" finish справа к start, тем самым получил соответствие в строке 'start | finish' но по каким то непонятным мне причинам кол-во начала и окончаний разное. Возможно БД с которой я работаю динамическая(еще не дошел до выяснения), что сподвигло меня на мысль что я иду в примитивном русле мышления, и хотел бы услышать у вас пару советов и нюансов. P.S буду признателен если будут пояснения для всех действий для восприятия информации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 16:29 |
|
||
|
Создание "пары" близжайших строк удовлетворяющих условию
|
|||
|---|---|---|---|
|
#18+
ora601Set_xx, Код: plsql 1. Итоговый отввет имеет вид: 1- 2 2 - 3 3 - 4 .. N-1 N Т.е получается финиш предыдущего берется за новый старт, как получить вид: 1 - 2 3 - 4 5 - 6 .. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 07:24 |
|
||
|
Создание "пары" близжайших строк удовлетворяющих условию
|
|||
|---|---|---|---|
|
#18+
Set_xx, Так а чем тебе мой вариант с объединением таблиц не нравится? Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 08:04 |
|
||
|
Создание "пары" близжайших строк удовлетворяющих условию
|
|||
|---|---|---|---|
|
#18+
DshedooSet_xx, Так а чем тебе мой вариант с объединением таблиц не нравится? Код: plsql 1. 2. 3. 4. Я не понимаю этот запрос) с lead я еще как то более менее ознакомился. Но если пояснишь что это за q1 q2 и прочее - буду только рад ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 08:27 |
|
||
|
Создание "пары" близжайших строк удовлетворяющих условию
|
|||
|---|---|---|---|
|
#18+
Set_xx, Можно обойтись и LEAD, преобразовав таблицу к нужному виду: старт - финиш - старт - финиш (убрав "лишние" строки). Но можно просто присоединить таблицу саму к себе по ближайшим строкам (q - это название таблицы, которая прописана в with, q1 и q2 - это алиасы). По сути, мы выбираем все записи из таблицы, у которых action = 'Start' (q1.action = 'Start'), затем присоединяем к ним все записи из этой же таблицы, у которых action = 'Finish' (q2.action = 'Finish'), У нас получается куча записей вида: 1) старт1 - финиш1 2) старт1 - финиш2 3) старт1 - финиш3 4) старт2 - финиш1 5) старт2 - финиш2 6) старт2 - финиш3 ... Затем мы обрезаем "финишы" условием: что дата финиша больше даты старта (q2.ddate > q1.ddate). Получим: 1) старт1 - финиш1 2) старт1 - финиш2 3) старт1 - финиш3 4) старт2 - финиш2 5) старт2 - финиш3 ... Затем из этого уже берём "ближайший" к старту финиш, т.е. дата финиша минимальна для этого старта (min(q2.ddate)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 09:08 |
|
||
|
Создание "пары" близжайших строк удовлетворяющих условию
|
|||
|---|---|---|---|
|
#18+
Dshedoo, А достаточно ли рационально использовать данный метод с таблицей в несколько миллионов строк? Ведь получается, что сначала генерируются все возможные пары, а далее идет выборка по наименьшему. Какие еще альтернативы можно рассмотреть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 11:17 |
|
||
|
Создание "пары" близжайших строк удовлетворяющих условию
|
|||
|---|---|---|---|
|
#18+
Set_xx, По поводу производительности и рациональности мало что могу подсказать. Можно сделать подзапрос + lead. Выбирать все записи юзая lead, а затем обрезать "лишние" ещё одним селектом (где action <> 'Start'). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 11:31 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39411458&tid=1886356]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 456ms |

| 0 / 0 |
