Grupiranje podataka

poruka: 5
|
čitano: 1.725
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
11 godina
offline
Grupiranje podataka

Mogu li se podatci grupirati prema određenim datumima?

 

Imam ovakav slučaj kod tablice:

 

No |       Početak     |        Kraj

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

1 | 1998-01-01 08:00 | 1998-01-01 16:00

2 | 1998-01-02 08:00 | 1998-01-02 16:00

3 | 1998-01-03 08:00 | 1998-01-03 16:00

4 | 1998-01-04 08:00 | 1998-01-04 16:00

5 | 1998-01-18 08:00 | 1998-01-18 16:00

6 | 1998-01-19 08:00 | 1998-01-19 16:00

7 | 1998-01-20 08:00 | 1998-01-20 16:00

8 | 1998-01-21 08:00 | 1998-01-21 16:00

9 | 1998-01-28 08:00 | 1998-01-28 16:00

 

 

Sad zanima me može li se ikako grupirati da imam grupiranje za datum od 01-01 do 01-04 jer bi trebao grupirati dan za danom gdje je razlika između dana jednaka 1, drugo grupiranje kreće od 01-18 do 01-21, i zadnje je od 01-28.

 

Ako netko ima ideju nek predloži mislio sam ubacivati vraijable pa kroz petlju provjeravati ako je razlika između n i n-1 u datumima jednaka jedan.

 

 

 

 

 
0 0 hvala 0
11 godina
neaktivan
offline
Re: Grupiranje podataka

Može bez petlje - početni datum je uvijek najmanji datum, a završni je svaki datum kojem "sutra" nije u podacima. Evo upit za PostgreSQL:

 

select a."min_Početak", b."Početak"
from (select min("Početak") as "min_Početak"
   from tablica
   ) as a
cross join (select "Početak"
   from tablica as t1
   where not exists(select "Početak"
      from tablica as t2
      where t2."Početak" = t1."Početak" + (INTERVAL '1' day)) -- ili kako već tvoja baza računa "sutra"
   ) as b

 

Rezultat:

 

"1998-01-01 08:00:00";"1998-01-04 08:00:00"
"1998-01-01 08:00:00";"1998-01-21 08:00:00"
"1998-01-01 08:00:00";"1998-01-28 08:00:00"

 

 

11 godina
offline
Re: Grupiranje podataka
Bobobo-bo Bo-bobo kaže...

Može bez petlje - početni datum je uvijek najmanji datum, a završni je svaki datum kojem "sutra" nije u podacima. Evo upit za PostgreSQL:

 

select a."min_Početak", b."Početak"
from (select min("Početak") as "min_Početak"
   from tablica
   ) as a
cross join (select "Početak"
   from tablica as t1
   where not exists(select "Početak"
      from tablica as t2
      where t2."Početak" = t1."Početak" + (INTERVAL '1' day)) -- ili kako već tvoja baza računa "sutra"
   ) as b

 

Rezultat:

 

"1998-01-01 08:00:00";"1998-01-04 08:00:00"
"1998-01-01 08:00:00";"1998-01-21 08:00:00"
"1998-01-01 08:00:00";"1998-01-28 08:00:00"

 

 

 Hmm samo meni bi ovako trebalo da ide umjesto ovoga tvoga:

 

"1998-01-01 08:00:00";"1998-01-04 08:00:00"
"1998-01-18 08:00:00";"1998-01-21 08:00:00"
"1998-01-28 08:00:00";"1998-01-28 08:00:00"

 

Pokušat ću preko ovog tvog smisliti sutra nekako pa javim, ugl hvala :)

 

11 godina
neaktivan
offline
Re: Grupiranje podataka

Sorry, išao sam po tvom izvornom zahtjevu:

 

Xyloto kaže...
... drugo grupiranje kreće od 01-18 do 01-21, i zadnje je od 01-28...

 

 mada vidim da je i tu nekako uletio interval 1-18.

 

Za tvoj konačni zahtjev treba kombinirati subquery koji daje krajeve intervala sa sličnim subqueryjem koji daje početke intervala, dodijeliti im redne brojeve i tako ih spojiti

 

select a."Početak", b."Početak"
from (select row_number() OVER (ORDER BY t1."Početak") as rnum, "Početak"
   from tablica as t1
   where not exists(select "Početak"
      from tablica as t2
      where t2."Početak" = t1."Početak" - (INTERVAL '1' day))
   ) as a
inner join (select row_number() OVER (ORDER BY t1."Početak") as rnum, "Početak"
   from tablica as t1
   where not exists(select "Početak"
      from tablica as t2
      where t2."Početak" = t1."Početak" + (INTERVAL '1' day))
   ) as b on a.rnum = b.rnum

 

11 godina
offline
Grupiranje podataka

Kada primjenim to što si napisao na ovo moje dobijem rezultat kao da sma upisao:

 

Select Početak from Datum 

 

samo mi izlista datume.

 

EDIT: 

Radi mi zeznuo sam se kod pretvaranja datuma iz datetime u date :D

Hvala ti još jednom :)

Poruka je uređivana zadnji put ned 2.10.2016 17:16 (Xyloto).
 
2 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice