Всичко за правенето на уеб страници и езици за програмиране.
kirofabv - специалист
imarh написа:
Задача:
Имам "log" таблица в която се пише с нещо от сорта:
insert into `logs` (`user`, `date`) values ($user_id, now());
Трябва ми средното време между записите за даден $user_id и то между записите, които имат разлика под 5 мин?
Да видим дали съм разбрал правилно имаш например за юзъра Ivan следните редове:
| Ivan | 12:55 |
| Ivan | 13:05 |
| Ivan | 13:08 |
| Ivan | 13:20 |
| Ivan | 13:22 |
| Ivan | 13:24 |
| Ivan | 13:30 |

Според условието за "под 5 мин. разлика" остават:
| Ivan | 13:05 |
| Ivan | 13:08 |
| Ivan | 13:20 |
| Ivan | 13:22 |
| Ivan | 13:24 |
Средно аритметично дава 2.33 предполага се че това търсиш как да изведеш или не съм разбрал правилно?

п.п. сега като се замисля така написано може и да ти трябват самите времена м/у два записа :-D ?
imarh - специалист
kirofabv написа:
imarh написа:
Задача:
Имам "log" таблица в която се пише с нещо от сорта:
insert into `logs` (`user`, `date`) values ($user_id, now());
Трябва ми средното време между записите за даден $user_id и то между записите, които имат разлика под 5 мин?
Да видим дали съм разбрал правилно имаш например за юзъра Ivan следните редове:
| Ivan | 12:55 |
| Ivan | 13:05 |
| Ivan | 13:08 |
| Ivan | 13:20 |
| Ivan | 13:22 |
| Ivan | 13:24 |
| Ivan | 13:30 |

Според условието за "под 5 мин. разлика" остават:
| Ivan | 13:05 |
| Ivan | 13:08 |
| Ivan | 13:20 |
| Ivan | 13:22 |
| Ivan | 13:24 |
Средно аритметично дава 2.33 предполага се че това търсиш как да изведеш или не съм разбрал правилно?

п.п. сега като се замисля така написано може и да ти трябват самите времена м/у два записа :-D ?
Да, таблицата изглежда така.
А на мен ми трябва средното време през което се е обаждал, но само когато обаждането е било със закъснение под 5 мин. Например:

........ИВАН...........4.12мин..........ИВАН............2.23мин..........ИВАН...............7.16мин..............ИВАН..............1.34мин......

Демек образно ми трябва (4.12+2.33+1.34)/3= 2.59мин.
С две думи, при намирането на средното време, искам резултата да не се влияе от записите когато Иван е закъснял с повече от 5 мин.
kapanec - специалист
Не знам дали ? ми се вписва в темата но моят проблем е следния. след погрешно форматиране на дял от харда успях да си въстановя информацията но някой файлове(Word i Excel )не ми ги отваря ,показва ми квадрати маймуници или нищо. имали програма която може да ми ги оправи
kirofabv - специалист
imarh написа:
.....
Това трябва да стане с функцийка, но не съм толкова добър или поне не се сещам на първо четене как точно да се случи така, че да вадиш 2 по 2 съседни редове и ако отговарят на условието < 5 мин да им вземаш резултата. Мога да направя програмче, което да ги смята, но нали не това е целта. :?
imarh - специалист
kapanec написа:
Не знам дали ? ми се вписва в темата но моят проблем е следния. след погрешно форматиране на дял от харда успях да си въстановя информацията но някой файлове(Word i Excel )не ми ги отваря ,показва ми квадрати маймуници или нищо. имали програма която може да ми ги оправи
Малко вероятно е. Когато си ги възстановявал просто не е било успешно, но това няма как да се разбере. Самото им възстановяване не е било възможно просто
.
Възстановяването на файлове след триене и форматиране всъщност представлява възстановяването на съдържанието от хард диска в областта, където е седял файлът. Но върху тази област явно се е бил настанил друг файл или част/и от друг/и файл/ове и ти си възстановил нещо или части от нещо.
imarh - специалист
kirofabv написа:
imarh написа:
.....
Това трябва да стане с функцийка, но не съм толкова добър или поне не се сещам на първо четене как точно да се случи така, че да вадиш 2 по 2 съседни редове и ако отговарят на условието < 5 мин да им вземаш резултата. Мога да направя програмче, което да ги смята, но нали не това е целта. :?
Решението е много просто. С един цикъл се намерят разликите във времената на съседните записи, които са под 5 мин. и се наливат във временна таблица или масив и след това се намира средното време. Въпросът е там, че аз искам това да стане само с една заявка, без цикъл и т.н. :supz:
kirofabv - специалист
Хм... със заявка не знам как можеш да обходиш редовете, да ги сравниш помежду им и т.н. хич да не е ще ти трябват 1-2 променливи, а това само в заявка поне аз не се сещам как да стане. Не мога да помогна :)
torbalan - Дървен философ
ако имаш сто записа през 1 минута за един узер...


какво точно ти трябва?

щото между първата и петата минута са пет минути
между втората и шестата...
между третата и седмата...
и т.н. :)
kirofabv - специалист
Е, сравняват се два съседни реда подредени по време подобно на метода на мехурчето, но само веднъж понеже ги имаш сортирани :)

1. Имаш подреден резултат: select dTime from log where szName = 'Ivan' order by dTime;
2. и функцийка с няколко променливи, която обработва резултата с един цикъл, например:
dTime (ред+1) - ред = result
if result < 5 then
begin
nSum := nSum + result;
N := N+1;
end;
и така докато ред = (select max(R) from (select ROW_NUMBER() from log where szName = 'Ivan' алабалаалабала)

Когато това условие се изпълни тогава A := nSum/N;

И получаваш А = средното аритметично време за реакция на иван без времената над 5 мин.
Сега ако нацеля и синтаксиса мога да писна една PL/SQL функция, но едва ли ще успея :)

п.п. баси как го написах :toimonster:
манихеин - специалист
Сравнявай времената предварително, т.е. - взимаш времето на последния достъп на user_id и го сравняваш с времето в момента. Ако разликата е под 5 - или колко там минути те интересуват, - я записваш в колона за средно аритметично в таблицата, ако не - NULL или каквото те устройва.

Тема "C#, Windows (MS) APIs, SQL - Питайте" | Включи се в дискусията:


Сподели форума:

Бъди информиран. Следвай "Направи сам" във Facebook:

Намери изпълнител и вдъхновения за дома. Следвай MaistorPlus във Facebook: