Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przeliczanie po wyszukani podobieństwa, Do czasu następnych pytań rozwiązane
Wykrywacz
post
Post #1





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


Mam takie proste zapytanie

  1. SELECT count(nr_pesel), nr_pesel
  2. FROM t_prac
  3. GROUP BY nr_pesel
  4. ORDER BY count(nr_pesel) DESC


A teraz mam pytanie jak zrobić żeby w obrębie peselu np. 00000000000 który powiedzmy występuje 3 razy. Wykonał operację (czyli np. jeżeli są tam data_od i data_do - to żeby odjło w 1 wierszu date_do - data_od poczył dodał różnicę dat z 2 wiersza poczym dodał różnicę dat 3 wiersza).

Czyli jak zrobić żeby zamknąć mu miejsce poszukiwania do tych 3 tylko wierszy.
(W części o php, starałem się to rozwiązać, ale niestety nie udało mi się próbuję innych sposobów stąd moje pytanie).

Ten post edytował Wykrywacz 1.03.2006, 16:54:31
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Nie jestem pewien, czy dobrze zrozumiałem.


  1. SELECT
  2. COUNT(nr_pesel),
  3. nr_pesel,
  4. SUM( date_do - data_od )
  5. FROM t_prac
  6. GROUP BY nr_pesel
  7. ORDER BY count(nr_pesel) DESC


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
Wykrywacz
post
Post #3





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


Działa super i o to mi chodziło, tylko że to topiero połowa mojego problemu.

Problem polega na tym, że często pojawia się tak że ten sam posel pojawia się 2-3 krotnie (raz nawet 43x).

A jeżeli pojawi się 2 razy to wychodzą mi jakieś dziwne wyniki znaczy się wyszedł mi -8862.

Jak zrobić żeby liczył to osobno.
Go to the top of the page
+Quote Post
DeyV
post
Post #4





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Poproszę przykładowe dane które generują błąd.
Szczególnie że powyższy przykład od razu zakładał, że dany PESEL pojawi się kilkakrotnie.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
Wykrywacz
post
Post #5





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


OK tamten błąd to mój błąd miałem źle wpisane daty:

Ale wyskoczyła mi jedna rzecz,
Mianowicie mam daty
pesel data_od data_do
123 2006-02-01 2006-02-28
123 2006-04-01 2006-04-25


Wynik tego powinnien być 53, przy tym zapytaniu wylicza mi 51, jest to normalne bo ucina przy odejmowaniu 1 dzięń.
czyli sformułowanie powinno wyglądać
  1. SUM( data_do - data_od ) +n


gdzie n to liczba występujących peseli czyli w rozpatrywanym przez nas przypadku 2 (jeżeli rekordów było by 43 to byla by to liczba 43).


ROZWIĄZAŁEM :
liczba "n" to -
  1. count(pesel)


Wszystko gra dzięki.

Jeszcze jedno pytanie mam tylko co do budowy pętli:
Chce zrobić tak że mam jeszcze jedną date data_rozw

i jeżeli data_do > data_rozw to liczy mi do daty rozw.

Możesz mi pomóc proszę bo w sql to jeszcze super nie jestem tongue.gif

Zrobiłem coś takiego
  1. SELECT count(pesel),pesel, SUM( data_do - data_od)+count(pesel) IF ( data_do > data_rozw ) then SUM( data_rozw - data_od)+count(pesel) else SUM( data_do - data_od)+count(pesel)
  2. FROM daty
  3. GROUP BY pesel ORDER BY count(pesel) DESC;


MAM!
W php (którego i tak do tego używam),
wyciągnołem sobie najpierw wartości data_do i data_rozw
tam zbudowałem pętle if

poczym wynik podstawiam dopiero do selecta gdzie wygląda to tak:
  1. .... SUM("$data" - data_od) + count(pesel)...


Proszę nie zamykajcie jeszcze tego tematu bo może pojawi się coś kolejnego z czym nie będe wstanie sobie poradzić.

Ten post edytował Wykrywacz 1.03.2006, 16:53:59
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 - 23:57