private void buttonANALIZIRAJ_Click(object sender, EventArgs e) { string upit = ""; string podupit = ""; string upit2 = ""; string podupit2 = ""; //Regex ZamjeniTocku = new Regex(@"\."); //tocka oznavama bilo koji znak, ne treba jer cemo Replace if (dateTimePickerDAYSTART.Value < dateTimePickerDAYFINISH.Value) { if (radioButtonPODANIMA.Checked) { poDanimaSTART = dateTimePickerDAYSTART.Text; poDanimaFINISH = dateTimePickerDAYFINISH.Text; poDanimaFINISH = poDanimaFINISH.Replace('.', '-'); //zamjena . sa - poDanimaSTART = poDanimaSTART.Replace('.', '-'); poDanimaFINISH = poDanimaFINISH.Remove(poDanimaFINISH.Length - 1);//maknit zadnju - poDanimaSTART = poDanimaSTART.Remove(poDanimaSTART.Length - 1); NpgsqlConnection connection = new NpgsqlConnection();//stvaram "prazan" objekt //moram CASTAT vrijeme unosa zato sto vrijeme_unosa je date time, a nas zanima samo date //radimo string koji saljemo u bazu: //gdje datum odgovara nekom periodu i grupiram po tome koji je zahrjev i po datumu // PIVOTINANJE: biramo sta zelimo da bude redak, a sta da bude stupac // grupiranje podataka po vise kriterija, tj sazeti prikaz podataka //za pivotiranje moramo mapravit sljedeci podupit: try { string connectionstring; Form2.GetConnection(out connection, out connectionstring); podupit = @"SELECT unos_korisnika, CAST(""vrijeme_unosa"" AS date) AS vrijeme, CAST(COUNT(*) AS integer) AS broj_unosa FROM queryhistory WHERE CAST(""vrijeme_unosa"" AS DATE) BETWEEN '" + poDanimaSTART + "' AND '" + poDanimaFINISH + @"' GROUP BY unos_korisnika, vrijeme ORDER BY Unos_korisnika, vrijeme"; // json_object_agg definirat: stupce u pivotiranju; on ce uzet datume i koliko ih ima i upit = @"SELECT unos_korisnika, json_object_agg(vrijeme, broj_unosa ORDER BY vrijeme) AS datumi FROM (" + podupit + @") podupiit GROUP BY unos_korisnika ORDER BY unos_korisnika"; //@ moram koristit da mi npr za \n ne stavlja novi red nego bas uzme \n NpgsqlDataAdapter da = new NpgsqlDataAdapter(upit, connectionstring); //PRICA S BAZOM ds.Reset(); // data set ono sta vrati baza analizaGrid.DataSource = null; //resetirat data source za svaki slucaj analizaGrid.AutoGenerateColumns = true; //ne zelimo da sam generira stupce nego cemo ih mi postavit //foreach(in ds.Tables[0]) da.Fill(ds); //data adapter napuni data set; a data table je jedna od tih dt = ds.Tables[0]; // dt.Columns[1]. analizaGrid.DataSource = dt; } catch (Exception k) { k.StackTrace.ToString(); //pokazivat ce tocno di je greska i ispisat koja je, opis greske } finally { connection.Close(); } } else if (radioButtonPOSATIMA.Checked) { poDanimaSTART = dateTimePickerDAYSTART.Text; poDanimaFINISH = dateTimePickerDAYFINISH.Text; poDanimaFINISH = poDanimaFINISH.Replace('.', '-'); //zamjena . sa - poDanimaSTART = poDanimaSTART.Replace('.', '-'); poDanimaFINISH = poDanimaFINISH.Remove(poDanimaFINISH.Length - 1);//maknit zadnju - poDanimaSTART = poDanimaSTART.Remove(poDanimaSTART.Length - 1); NpgsqlConnection connection = new NpgsqlConnection();//stvaram "prazan" objekt //moram CASTAT vrijeme unosa zato sto vrijeme_unosa je date time, a nas zanima samo date //radimo string koji saljemo u bazu: //gdje datum odgovara nekom periodu i grupiram po tome koji je zahrjev i po datumu // PIVOTINANJE: biramo sta zelimo da bude redak, a sta da bude stupac // grupiranje podataka po vise kriterija, tj sazeti prikaz podataka //za pivotiranje moramo mapravit sljedeci podupit: try { string connectionstring; Form2.GetConnection(out connection, out connectionstring); podupit2 = @"select unos_korisnika, EXTRACT(HOUR FROM ""vrijeme_unosa"") AS vrijeme, CAST(COUNT(*) AS integer) AS broj_unosa FROM queryhistory WHERE CAST(""vrijeme_unosa"" AS DATE) BETWEEN '" + poDanimaSTART + "' AND '" + poDanimaFINISH + @"' GROUP BY unos_korisnika, vrijeme ORDER BY unos_korisnika, vrijeme"; // json_object_agg definirat: stupce u pivotiranju; on ce uzet datume i koliko ih ima i upit2 = @"SELECT unos_korisnika, json_object_agg(vrijeme, broj_unosa ORDER BY vrijeme) AS datumi FROM (" + podupit2 + @") podupit2 GROUP BY unos_korisnika ORDER BY unos_korisnika"; //@ moram koristit da mi npr za \n ne stavlja novi red nego bas uzme \n NpgsqlDataAdapter da = new NpgsqlDataAdapter(upit, connectionstring); //PRICA S BAZOM ds.Reset(); // data set ono sta vrati baza da.Fill(ds); //data adapter napuni data set; a data table je jedna od tih dt = ds.Tables[0]; analizaGrid.DataSource = dt; } catch (Exception k) { k.StackTrace.ToString(); //pokazivat ce tocno di je greska i ispisat koja je, opis greske } finally { connection.Close(); } } } else { MessageBox.Show("ERROR! Datum neispravan!"); } }