Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] wartość z wcześniejszego wiersza
staspolo
post 7.07.2015, 14:02:55
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 2.06.2005

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
nospor
post 7.07.2015, 14:04:15
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




uzywasz w mysql zmiennej pomocniczej i po sprawie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kishin
post 7.07.2015, 14:58:43
Post #3





Grupa: Zarejestrowani
Postów: 148
Pomógł: 17
Dołączył: 20.12.2011

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


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

Go to the top of the page
+Quote Post
staspolo
post 7.07.2015, 15:20:13
Post #4





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 2.06.2005

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


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.
Go to the top of the page
+Quote Post
KsaR
post 7.07.2015, 15:28:25
Post #5





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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


--------------------
Go to the top of the page
+Quote Post
Kishin
post 7.07.2015, 15:59:40
Post #6





Grupa: Zarejestrowani
Postów: 148
Pomógł: 17
Dołączył: 20.12.2011

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


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.

Go to the top of the page
+Quote Post
trueblue
post 7.07.2015, 18:37:49
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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


--------------------
Go to the top of the page
+Quote Post
staspolo
post 7.07.2015, 19:37:39
Post #8





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 2.06.2005

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


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.
Go to the top of the page
+Quote Post
nospor
post 8.07.2015, 06:50:27
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ja nie mowilem o procedurach.

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

Prosze, zmienna pomocnicza bez procedur.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:08