|
OBECNI NA TPC |
|
|
» NimnuL 06:15 » NWN 05:07 » Shark20 02:49 » MARC 02:08
Dzisiaj przeczytano 41119 postów, wczoraj 25974
Szybkie ładowanie jest: włączone.
|
|
|
|
|
|
TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
SQL - jak wyciagnąć takie dane: , ptoki 21/03/12 21:17 Mamy tabelke zawierajaca kolumny:
czas,nazwa, czas_trwania
Czyli np.
2012-03-21,aaa, 20
2012-03-21,aaa, 21
2012-03-21,aaa, 30
2012-03-21,aaa, 35
2012-03-20,aaa, 10
2012-03-20,aaa, 11
2012-03-20,aaa, 20
2012-03-20,aaa, 25
Jak wyciagnac: ilosc wartosci pod progiem, nad progiem i ich stosunek dla kazdego dnia?
Czyli w rezultacie dla progu np 27:
2012-03-20, 4, 0, 1
2012-03-20, 2, 2, 0,5
fajnie by bylo jakby dalo sie wyciagnac to jednym sql-em ale niezbyt skomplikowanym. To BSM-owe api nie umie zbyt dużo.
Cytat:
Inner selects and joins are not supported, with one exception: an inner
select can be used to return the values for an IN clause.
Wolalbym nie obrabiac tego w php tylko dostac gotowy wynik z zapytania.
Od biedy wystarczy mi sam stosunek wartosci dla kazdego dnia.
Inicjalna wersja zapytania w luznej notacji:
select byTime(timestamp,40,1,0) (taki ichni distinct agregujacy czas), name, value from table where timestamp between wczoraj and dzis and value < 27;
Jak teraz ja zmodyfikowac zeby dostac te jedna/trzy wartosci?
Bo na moje oko to chyba sie nie da...
Ponizej wycinek dokumentacji co jest do dyspozycji:
The language supported is a subset of SQL and supports these keywords,
modifiers, and operators:
➤ SELECT
➤ WHERE
➤ FROM
➤ TOP
➤ HAVING
➤ Aliasing with the AS keyword
➤ Logical operators OR , AND , NOT
➤ DISTINCT modifier (only supported for select list items)
➤ IN operator. Inner selects can be used to return the values for the IN
operator.
➤ BETWEEN operator
➤ IS NULL (IS NOT NULL is not supported)
➤ LIKE. The wildcard character is the asterisk (*). Do not use the percent
sign (%). The asterisk can not be used by itself (LIKE *). It must be used
with other characters.
➤ Mathematical operators: +, -, *, /, (, )
➤ Comparators: =, IS, !=, <>, >, >=, <, <=
➤ ORDER BY and the ASC and DESC modifiers
Supported Functions
The supported functions are as follows:
➤ MAX
➤ MIN
➤ SUM
➤ COUNT
➤ AVG
➤ STDDEV
➤ SUMOFSQR
➤ LOG
➤ CEIL
➤ FLOOR
➤ MOD
➤ SQRT
➤ REPLACENULL (equivalent to Oracle’s NVL and Microsoft SQL Server’s
ISNULL)
➤ IF
➤ "byTime Function" described on page 297- Są podzapytania? , Tig3r 22/03/12 11:59
SELECT tbl_count.f_count, tbl_below.f_below, (tbl_count.f_count-tbl_below.f_below) AS f_above FROM
(SELECT COUNT(tbl.test_value) AS f_count FROM test AS tbl GROUP BY tbl.test_date) AS tbl_count,
(SELECT COUNT(tbl.test_value) AS f_below FROM test AS tbl WHERE tbl.test_value<=7 GROUP BY tbl.test_date) AS tbl_below
BTW jak rozumiesz stosunek (ratio) w swoim przykładzie? Bo 4/0 to nie jest 1, a 2/2 to nie jest 0,5. - Nie ma podzapytan tak ogolnie z zastrzeżeniem jakie podalem. , ptoki 22/03/12 12:30
ratio jakie mam na mysli to ilosc tych w zakresie do sumy wszystkich.
Narazie klece takie cos za pomoca hashy w php bo jednak troche wiecej mozliwosci zaczarowania danymi jak sie je juz ma na poziomie php.
I calosc wciagam na dwa/trzy razy. Raz te ponizej progu, raz te powyzej progu i raz wszystkie aby zweryfikowac czy cos sie nie pomieszalo... - To może tak: , Tig3r 22/03/12 13:21
SELECT
tbl.f_date,
COUNT(tbl.f_value) AS f_all,
SUM(CASE WHEN tbl.f_value<7 THEN 1 ELSE 0 END) AS f_lower,
SUM(CASE WHEN tbl.f_value<7 THEN 1 ELSE 0 END) / COUNT(tbl.f_value) AS f_part_lower,
SUM(CASE WHEN tbl.f_value>7 THEN 1 ELSE 0 END) AS f_higher,
SUM(CASE WHEN tbl.f_value>7 THEN 1 ELSE 0 END) / COUNT(tbl.f_value) AS f_part_higher
FROM test AS tbl
WHERE TRUE
GROUP BY tbl.f_date- Niestety to api nie uznaje CASE :( , ptoki 22/03/12 14:56
Juz sie obgnilem tabelkami. Teraz juz tylko posortowac mi trzeba bo hash-e rozsortowywuja...
|
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|