Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przeliczanie po wyszukani podobieństwa
Forum PHP.pl > Forum > Bazy danych > MySQL
Wykrywacz
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).
DeyV
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
Wykrywacz
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.
DeyV
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.
Wykrywacz
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ć.
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.