Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
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.

 
ccc
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:
&#10148; SELECT
&#10148; WHERE
&#10148; FROM
&#10148; TOP
&#10148; HAVING
&#10148; Aliasing with the AS keyword
&#10148; Logical operators OR , AND , NOT
&#10148; DISTINCT modifier (only supported for select list items)
&#10148; IN operator. Inner selects can be used to return the values for the IN
operator.
&#10148; BETWEEN operator
&#10148; IS NULL (IS NOT NULL is not supported)
&#10148; 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.
&#10148; Mathematical operators: +, -, *, /, (, )
&#10148; Comparators: =, IS, !=, <>, >, >=, <, <=
&#10148; ORDER BY and the ASC and DESC modifiers
Supported Functions
The supported functions are as follows:
&#10148; MAX
&#10148; MIN
&#10148; SUM
&#10148; COUNT
&#10148; AVG
&#10148; STDDEV
&#10148; SUMOFSQR
&#10148; LOG
&#10148; CEIL
&#10148; FLOOR
&#10148; MOD
&#10148; SQRT
&#10148; REPLACENULL (equivalent to Oracle&#8217;s NVL and Microsoft SQL Server&#8217;s
ISNULL)
&#10148; IF
&#10148; "byTime Function" described on page 297

  1. 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.

  2. 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...

  3. 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

    1. 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