
BG Development · За реклама · За контакти |
![]() ![]() ![]() ![]() ![]() |
Здравей! ( Включване | Регистриране ) |
Страници: (2) [1] 2 ( Първото ново мнение ) | ![]() ![]() ![]() |
thrawn |
Публикувано на: 20-01-2021, 15:23
|
||||||||
![]() Име: Група: Потребител Ранг: Почетен член Мнения: 3076 Регистриран на: 17.01.17 ![]() |
Нещо зациклих, та малко помощ няма да ми дойде зле. Имам лог система в която се записа дата и част (timestamp without time zone) на събитие и период на неактивност (interval) + id на потребител. Целта е да групирам записите по id така, че във всяка група да няма периоди на неактивност по-големи от 5 минути. Разбирасе, всичко подредено хронологично. Някаква идея как да се реализира с sql? За postgresql иде реч. ---- Ето примерни данни
От това трябва да получа две групи
като реално ме интересува минималната и максималната стойност на дата във всяка група
Това мнение е било редактирано от thrawn на 20-01-2021, 15:30 |
||||||||
thrawn |
Публикувано на: 20-01-2021, 15:54
|
||
![]() Име: Група: Потребител Ранг: Почетен член Мнения: 3076 Регистриран на: 17.01.17 ![]() |
Ето това съм избацал до сега, ама търся по грамотно решение
|
||
ici |
Публикувано на: 20-01-2021, 16:05
|
||
![]() ![]() Име: Ивайло Илчев Група: VIP Ранг: Почетен член Мнения: 17632 Регистриран на: 06.06.04 ![]() |
-------------------- Ние не сме в една лодка, ние сме в една буря. Лодките са различни.
Следващият път когато се почувстваш ненужен, грозен и недооценен, помни че освен това си и тъп. |
||
thrawn |
Публикувано на: 20-01-2021, 16:36
|
||||
![]() Име: Група: Потребител Ранг: Почетен член Мнения: 3076 Регистриран на: 17.01.17 ![]() |
Не става така, having връща конкретен ред. В твоя пример event трябва да част от group клаузата (или да се ползва в агрегатна функция). А това променя коренно условието. --- едит В моя вариант това
е достатъчно да бъде
Това мнение е било редактирано от thrawn на 20-01-2021, 17:00 |
||||
thrawn |
Публикувано на: 20-01-2021, 17:26
|
![]() Име: Група: Потребител Ранг: Почетен член Мнения: 3076 Регистриран на: 17.01.17 ![]() |
ето примерни данни за тестове http://sqlfiddle.com/#!17/29eeb/1
|
wqw |
Публикувано на: 22-01-2021, 11:33
|
||
![]() ![]() Име: Владимир Висулчев Група: VIP Ранг: Почетен член Мнения: 6249 Регистриран на: 10.06.04 ![]() |
Идеята е да синтезираш group_id за да може да групираш по него в последния SELECT. cheers, </wqw> -------------------- |
||
thrawn |
Публикувано на: 22-01-2021, 16:34
|
![]() Име: Група: Потребител Ранг: Почетен член Мнения: 3076 Регистриран на: 17.01.17 ![]() |
То и при мен логиката е да създам поле по което в последствие да групирам - sid то.
Иначе, няма нужда да смяташ сам интервалите. Те са налични директно в idle_interval. |
wqw |
Публикувано на: 22-01-2021, 17:50
|
||
![]() ![]() Име: Владимир Висулчев Група: VIP Ранг: Почетен член Мнения: 6249 Регистриран на: 10.06.04 ![]() |
Това ми се струва странно при положение, че имаш интервал от 51 години в примерните данни. Аз помислих че интервалите са ти на база event_time на редовете т.е. интервал като понятие е между event_time на текущия event и event_time на следващия event. Поне по този начин изглеждаше резултата, не на база на idle_interval. cheers, </wqw> -------------------- |
||
thrawn |
Публикувано на: 22-01-2021, 18:28
|
![]() Име: Група: Потребител Ранг: Почетен член Мнения: 3076 Регистриран на: 17.01.17 ![]() |
51 -години е интервал от "нулата" 01-01-1970, демек от null.
Реално погледнато мен не ме бърка числото а само това дали е по-голямо или по-малко от 5 минути. Просто предпочетох да го направя да смята данните еднократно при записване отколкото да ги смятам всеки път при поискване. Иначе, да интервалите са между редовете, но вече са сметнати. Това мнение е било редактирано от thrawn на 22-01-2021, 18:29 |
wqw |
Публикувано на: 22-01-2021, 18:53
|
![]() ![]() Име: Владимир Висулчев Група: VIP Ранг: Почетен член Мнения: 6249 Регистриран на: 10.06.04 ![]() |
Ахааа, интервала е *назад* спрямо event_time. Не знам защо не ми хрумна, може би защото никога не проектирам по този начин времеви данни. Обикновено имам start_time и elapsed, но не end_time + back_interval, което е по-лесно за логване сега се досещам.
cheers, </wqw> Това мнение е било редактирано от wqw на 22-01-2021, 18:54 -------------------- |
![]() |
![]() ![]() ![]() |