Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] wartość z wcześniejszego wiersza
Forum PHP.pl > Forum > Przedszkole
staspolo
Witam,
czy zna ktoś sposób na pobranie wartości wcześniejszego wiersza bądź czy jest to w ogóle wykonalne na etapie zapytania (pomijając php, procedury, itd.)

załóżmy że mam taki wynik zapytania

id | wartosc
1 | 11111
2 | 22222
3 | 33333
4 | 44444

pożądany efekt to:

id | wartosc | wartość2
1 | 11111 | null
2 | 22222 | 11111
3 | 33333 | 22222
4 | 44444 | 33333

ewentualnie czy istnieje jakaś funkcja która zwróci różnice (wynik odejmowania) występujących po sobie wierszy

dzięki pozdrawiam
nospor
uzywasz w mysql zmiennej pomocniczej i po sprawie
Kishin
cos takiego tez zadziala

  1. SELECT t.id,t.wartosc wartosc1 ,c.wartosc wartosc2 FROM TABLE t
  2. LEFT JOIN TABLE c ON c.id=t.id-1

staspolo
dzięki za odpowiedź,
zapomniałem dodać że id jest co prawda narastające jednakże nieregularnie, także id-1 odpada,

co do zmienne pomocniczej?, mógłbyś dać jakiś przykład.
KsaR
Cytat(staspolo @ 7.07.2015, 16:20:13 ) *
dzięki za odpowiedź,
zapomniałem dodać że id jest co prawda narastające jednakże nieregularnie, także id-1 odpada,

co do zmienne pomocniczej?, mógłbyś dać jakiś przykład.


Pewnosci nie mam ale zamiast:

c.id=t.id-1

Mozna by:

c.id<t.id

Z ewentualnym posortowaniem ORDER BY `id` DESC
Kishin
no to bez zmiennej sie nie obejdzie

  1.  
  2. SET @rownuma = 0;
  3. SET @rownumb = 0;
  4.  
  5. SELECT a.id,a.wartosc wartosc1 ,b.wartosc wartosc2 FROM
  6. (SELECT @rownuma:=@rownuma+1 AS rownum, id,wartosc FROM `tabela`)a
  7. LEFT JOIN
  8. (SELECT @rownumb:=@rownumb+1 AS rownum, id,wartosc FROM `tabela`)b
  9. ON a.rownum-1=b.rownum
  10.  


pewnie da sie to napisać lepiej ale ja też dopiero zaczynam ze zmiennymi.

trueblue
Cytat(Ksar @ 7.07.2015, 16:28:25 ) *
Pewnosci nie mam ale zamiast:

c.id=t.id-1

Mozna by:

c.id<t.id

Z ewentualnym posortowaniem ORDER BY `id` DESC

  1. SELECT t1.id,t1.wartosc,(SELECT t2.wartosc FROM tabela AS t2 WHERE t2.id<t1.id ORDER BY t2.id DESC LIMIT 0,1) FROM tabela AS t1

Ale dużo wydajniejsze będzie ze zmienną pomocniczą.
staspolo
dzięki, temat rozwiązany.
Zapytanie potrzebowałem użyć na firebird-zie gdzie zmienną pomocniczą mogę użyć w procedurze a tego chciałem uniknąć.
kombinacja <, desc, limit (first skip) dała oczekiwany rezultat

jeszcze raz wielkie dzięki.
nospor
Ja nie mowilem o procedurach.

  1. SET @zm:=NULL;
  2. SELECT wartosc,@zm AS wartosc2,@zm:=wartosc FROM tabela

Prosze, zmienna pomocnicza bez procedur.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.