Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Odejmowanie wartosci pomiedzy parami rekordów ?
Unises
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 6.02.2006

Ostrzeżenie: (0%)
-----


Witam
Mam taki problem, jest tabela a w niej pole czas z takimi danymi (posortowane dokładnie w taki sposóB)

CZAS
2007-12-03 06:51:01
2007-12-03 15:03:01
2007-12-04 06:54:01
2007-12-04 15:01:01
2007-12-05 06:53:01
2007-12-05 15:00:01
2007-12-06 06:58:01
2007-12-06 15:02:01
2007-12-07 06:50:01
2007-12-07 15:02:01
2007-12-10 06:57:01

Czy jest w ogóle możliwe za pomocą SQL utworzenie zapytania,
które potrafiło by w nowej kolumnie lub w inny sposób pokazać wynik różnice pomiędzy parami rekordów np w godzinach .

2007-12-03 06:51:01|
2007-12-03 15:03:01|8:11

itd
2007-12-04 06:54:01|
2007-12-04 15:01:01|8:07

Oczywiście w rachubę nie wchodzi założenie warunku na dany dzień bo czasami może zdarzyć się taka para (na przełomie doby)

2007-12-04 23:53:01|
2007-12-05 06:01:01|8:08

Przykładowy wynik podałem w godzinach : z minutami
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
prond
post
Post #2





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Poniższe zapytanie będzie pokazywalo roznice pomiedzy biezacym rekordem, a poprzednim.
Jezeli chcesz to zrobic parami musisz dodac sobie jeszcze jedna zmienna, ktora bedzie przyjmowala na zmiane warotsci 1 i 0 i liczyc roznice miedzy datami np. tylko dla jedynki.
Roznica dat w ponizszym przykladzie jest w minutach (jako int).
  1. SET @intLastDate := 0;
  2. SELECT
  3. *,
  4. TIMESTAMPDIFF(MINUTE,@intLastDate,modified),
  5. @intLastDate := modified
  6. FROM posts ORDER BY modified ASC;


--------------------
--------------------------------------------------------------------------------
weblog.axent.pl
--------------------------------------------------------------------------------
Go to the top of the page
+Quote Post
Unises
post
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 6.02.2006

Ostrzeżenie: (0%)
-----


Dziękuje za zainteresowanie tematem, ale coś mi to nie działa wstydnis.gif
łącze sie z bazą za pomocą takiego narzędzia SQL Server Management Studio Express
tworze jak zwykle new query

daje to:

  1. SET @intLastDate := 0;
  2. SELECT
  3. *,
  4. TIMESTAMPDIFF(MINUTE,@intLastDate,modified),
  5. @intLastDate := modified
  6. FROM czas ORDER BY modified ASC;


i otrzymuje niestety

Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near ':'.
Msg 137, Level 15, State 2, Line 4
Must declare the variable '@intLastDate'.

Nie jestem biegły w MSSQL większość prostych rzeczy robie z doskoku w miarę potrzeb.
Niestety nie wiem jak mu zdeklarować inaczej tą zmienną by ją widział
próbowałem już bez ":" w nawiasach itd ale tez sie wywala sadsmiley02.gif
Go to the top of the page
+Quote Post
prond
post
Post #4





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Mój błąd - ślepo założyłem, że chodzi Tobie o MySQL.
Nie pracowałem za dużo z MSSQL, ale może poszukaj tam funkcji rankingujących, bo to jedyna szansa na zrealizowanie tego zapytania.

A można też tak:
  1. SELECT
  2. Post.*,
  3. (SELECT TIMESTAMPDIFF(MINUTE,MAX(modified),Post.modified) FROM posts tmp WHERE tmp.id <> Post.id AND tmp.modified <= Post.modified) AS diff
  4. FROM posts AS Post
  5. ORDER BY modified;


Tylko to jest mało optymalne.

Ten post edytował prond 3.01.2008, 13:32:31


--------------------
--------------------------------------------------------------------------------
weblog.axent.pl
--------------------------------------------------------------------------------
Go to the top of the page
+Quote Post
Unises
post
Post #5





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 6.02.2006

Ostrzeżenie: (0%)
-----


Dziękuje za podpowiedz guitar.gif
, będę "grzebał" dalej
, a jeśli chodzi o błąd; to ja zawiniłem niedoprecyzowaniem o jaki typ bazy chodzi.

Cytat
A można też tak:

  1. SELECT
  2. Post.*,
  3. (SELECT TIMESTAMPDIFF(MINUTE,MAX(modified),Post.modified) FROM posts tmp WHERE tmp.id <> Post.id AND tmp.modified <= Post.modified) AS diff
  4. FROM posts AS Post
  5. ORDER BY modified;


Chyba jednak nie

Msg 195, Level 15, State 10, Line 1
'TIMESTAMPDIFF' is not a recognized function name.

Ten post edytował Unises 3.01.2008, 13:47:03
Go to the top of the page
+Quote Post
prond
post
Post #6





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No to juz kwestia funkcji do operacji na datach - wyszukaj w manualu 'date and time functions' i pewnie znajdziesz tam odpowiednik MySQL'owego TIMESTAMPDIFF.
Moze tez wystarczy tobie prosta roznica : MAX(modified) - Post.modified


--------------------
--------------------------------------------------------------------------------
weblog.axent.pl
--------------------------------------------------------------------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 09:00