MYSQL - Sumowanie wybranych pól dla danej godziny

MYSQL - Sumowanie wybranych pól dla danej godziny
K4
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:14
0

Myślę już trochę jakby to ugryźć i coś nie mogę wymyślić. Otóż mam tabelę w której są trzy kolumny (pomijając id) - server_id, numbers oraz time. Potrzebuję zsumować kolumny numbers, które należą do wybranego rekordu w server_id i mają tę samą datę w time (data jest przechowywana w formacie TIMESTAMP , więc muszę to rozczytać w skrypcie php na format np. H:s). Podrzucicie pomysły lub przykłady bym mógł to zrozumieć i napisać samemu? :)

edytowany 1x, ostatnio: Kamcio4
Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:2 dni
  • Postów:2792
0

Mają tę samą datę, czy wartość? Jesli wartość to Group by server_id, time. A jesli data, to zamień w tym grupowaniu Time na funkcję która liczy datę...

K4
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:14
0

W sumie no tak. Teraz widzę, że coś nie tak ze mną było w godzinach popołudniowych. Przecież to ogromnie proste. Zrobiłem to jednak przez WHERE:

Kopiuj
SELECT SUM(users) FROM pages_users WHERE server_id = 22 and time = xxxx

Prawdziwy problem dla mnie zaczyna się tutaj:
```
{
type: 'line',
data: {
labels: ['11:00', '12:00', '13:00', '14:00', '15:00'],
datasets: [{
data: [23, 45, 56, 44, 47],
label: "users online",
fill: false
}
]
},

Kopiuj
To część mojego kodu, który tworzy wykres. Chciałbym, aby przedstawiał 24 godzinny ruch na stronie. W **labels** podaje się godziny (co godzinę - max 24 godziny), a w **data** ilość osób online w tamtej godzinie. Jak się za to zabrać?
edytowany 1x, ostatnio: Kamcio4
CS
  • Rejestracja:ponad 6 lat
  • Ostatnio:6 dni
  • Postów:296
2

Może tak

Kopiuj
select sum(users), hour(time) as sh
from pages_users
where server_id = 1
group by sh
K4
Wow! To naprawdę działa :D Dziękuję bardzo :)
K4
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:14
0

Ahh, po czasie widzę, że mam jeszcze jeden mały problemik. Wszystko działa perfekcyjnie, tylko gdy na końcu dodam sobie LIMIT 24, to wyświetla mi 24 pierwsze rekordy, a nie ostatnie które mnie interesują.

CS
  • Rejestracja:ponad 6 lat
  • Ostatnio:6 dni
  • Postów:296
0

To użyj offsetu, np. statystyki dla godzin od 12.00 do 23.00, czyli ostatnie 12 pozycji:

Kopiuj
SELECT SUM(users), HOUR(TIME) AS sh
FROM pages_users
WHERE server_id = 1
GROUP BY sh
LIMIT 12
OFFSET 24-12
K4
Wprawdzie z tym offsetem mi nie podziałało, ale zmieniłem grupowanie z sh na id i na razie hula. Jeśli ja nie będę nic ruszał w tej tabeli to nie powinno być żadnych nieprawidłowości przez grupowanie po id? (skrypt wszystko dodaje)
K4
Oho. Jednak nie. W jednym wykresie działa to dobrze, ale w innym, gdzie łączę parę kolum server_id dla danej godziny to już nie przechodzi. Ogólnie to działa, ale problem jest z północą. Za dnia wszystko wygląda dobrze: 03:00, 07:00, 16:00, 22:00. A po północy zaczyna się psuć grupowanie: 01:00, 02:00, 03:00, 07:00, 16:00, 22:00 <- Dodaje rekordy na początek zamiast po 22:00
CS
  • Rejestracja:ponad 6 lat
  • Ostatnio:6 dni
  • Postów:296
0

Mogę się domyślać, że po północy nad ranem brak ruchu na stronach i brak wpisów do statystyk, stąd braki. Jeśli tak, to stwórz tabelę lub widok hoursi wygeneruj ciąg wszystkich godzin od 0 do 23 do kolumny hour, i zrób "lewego joina":

Kopiuj
select h.hour, stats.ucount
from hours h
LEFT join (select sum(users) as ucount, HOUR(time) as sh
from pages_users
group by sh) stats 
on stats.sh = h.hour
order by h.hour

Dla brakujących godzin będzie tam NULL, więc sam pokombinuj jak zamienić to na zero. Teraz limit o offset będą działać tak jak trzeba, bo to zapytanie zawsze zwróci 24 wiersze.

K4
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:14
0

Nie nie, źle mnie zrozumiałeś. Nie mam żadnych braków (ruch na stronie to tylko przykrywka, tak naprawdę zliczam coś innego). Wszystkie dane w bazie są prawidłowe. I też nie chodzi o brak wpisów do statystyk, lecz o grupowanie wyników po godzinie. Nie wyświetla mi wyników tak jak my to liczymy: 23:00, 00:00, 01:00, lecz wyświetla to w ten sposób: 00:00, 01:00, 23:00. Moje zapytanie aktualnie wygląda tak:

Kopiuj
SELECT SUM(users), HOUR(TIME) AS sh FROM servers_users WHERE account_id = "'.$user['id'].'" GROUP BY sh LIMIT 24
edytowany 1x, ostatnio: Kamcio4
CS
  • Rejestracja:ponad 6 lat
  • Ostatnio:6 dni
  • Postów:296
1

Chłopie, pisz jaśniej, bo tak to szkoda czasu. Ostania próba czytania w Twoich intencjach, chodzi o przedział godzinowy np. od 18 do 5? Jeśli tak, to zrób z klauzulą having i unionem :

Kopiuj
select sum(users), HOUR(time) as sh
from servers_users
group by sh
having sh > 17
union 
select sum(users) as hcount, HOUR(time) as sh
from servers_users
group by sh
having sh < 6
K4
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:14
0

Wprawdzie do tego konkretnego przykładu, to zapytanie by się nadało po dodatkowym obliczaniu godzin. Jednak chciałbym je mieć uniwersalne, aby też przy innych wykresach je wykorzystać. Doceniam to, że mi pomagasz. Dzięki. Mimo wszystko, uważam jednak, że to nie jest czytanie w moich intencjach. Ogólnie w tym wątku wspomniałem co mnie dokładnie interesuje (a że wątek się trochę ciągnie to już inna kwestia).

Zbierając do kupy wszystkie informacje:

  • To ma być wykres 24 godzinny
  • Pokazywane mają być najświeższe dane
  • Dane mają być prezentowane od aktualnej godziny do tej samej dnia wczorajszego. Teraz jest godzina 20 (nie licząc minut) i wykres ma pokazywać dane przez ostatnią dobę do wczoraj do godziny 20.

Przepraszam, że się wcześniej nie zrozumieliśmy. Mógłbym liczyć ostatni raz na pomoc? Bardzo mi na tym zależy.

CS
Zmień w poprzednim zapytaniu 17 i 6 na funkcję pobierającą godzinę z bieżącego czasu, i zmień jeden z operatorów z < > na >= lub <= w zależności, gdzie powinna być bieżąca godzina; na początku czy na końcu.
Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:2 dni
  • Postów:2792
1
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)