[ popmilan76 @ 12.10.2021. 17:19 ] @
iMam neke podatke,koje imaju datumsko polje...Kako da izvedem da napravim da mi izlista te datume za jednu godinu po mesecima,i jedan mesec po nedeljama ili danima?
[ savkic @ 13.10.2021. 09:53 ] @
Nije jasno sta trazis, daj primer ili bolje objasni.
[ Rapaic Rajko @ 13.10.2021. 20:32 ] @
Pitanje se odnosi na podatke u bazi/tabeli ili na podatke u listi?
[ popmilan76 @ 14.10.2021. 19:55 ] @
Pronasao sam resenje delimicno...Potrebno mi je bilo za tabelu iz access,pa sam iskoristio komandu months,po mesecima,pa sam tako izlistao po mesecima za godinu...
[ popmilan76 @ 14.10.2021. 20:45 ] @
E,sada ono što je delimično već potpada pod nešto drugo,ali ću se nastaviti ovde...

Reč je union all komandi u upitu,to napravim ovako nesto


SELECT Month(Datum) AS Mesec, Sum(Nalozi.Cena) AS Iznos,0
FROM Nalozi
where brojnaloga > 0
GROUP BY Month(Datum)
UNION ALL SELECT Month(Datum) AS Mesec,0, Sum(Nalozi.Cena) AS Iznos1
FROM Nalozi
where brojnaloga = 0
GROUP BY Month(Datum)
UNION ALL SELECT Month(Datum) AS Mesec,0, Sum(Nalozi.Cena) AS Iznos1
FROM Nalozi
where brojnaloga = 0
GROUP BY Month(Datum);


i izadju podaci recimo

8-2021------200,00------0
8-2021---------0---------100,00

a meni treba ovako nesto,razlika toga za ceo mesec


8-2021------100,00

Dakle 200 - 100 = 100


Jel to moguće u ovoj sql komandi?
[ savkic @ 15.10.2021. 11:51 ] @
Vise ideja,
- napravis view od ovog kverija pa selektujes iz njega ili ako ti baza podrzava select nad selectom onda direktno.
- ako ima IIF ili CaseIF onda bi sum mogao nad njihovim rezultatima, jedan za Nalog-0, drugi za > 0
- napravis stored proceduru sa zeljenim racunom pa selekt iz nje
- napravis dupli outer join nad tabelom nalozi, jednom za Nalog-0, drugi za Nalog>0, pa ih spojis po godini i mesecu i sracunas sumu

[ popmilan76 @ 16.10.2021. 19:14 ] @
Pokušao sam ovo poslednje,ali sam pokušao na neki način pomoću access,napravio kveri prihod za > 0 i kveri za rashod = 0,i od ta dva kverija napravio join,gde godina = godina,ali ne pravi sumu lepo,jer nekada imam za recimo mesec 10 Prihod,ali nemam rashod...
[ savkic @ 17.10.2021. 00:35 ] @
Ako imaš prihod a nema rashoda onda je suma samo prihod, nemoj koristiti inner join već outer join.
[ popmilan76 @ 17.10.2021. 16:20 ] @
Da,pokušao sam,ali izgleda da access to ne podržava,tj adoquery outer join,pa koristim left,jel skoro nikada neću imati rashoda,a da ne bude prihoda...I nešto sam guglao,ovo outer join,može kao union all,gde je jedna unija left,a druga right...
[ djoka_l @ 17.10.2021. 16:26 ] @
Koristi switch funkciju accessa
https://support.microsoft.com/...0d-0c8e-444c-9e63-f47504f9e379

Napravi kolonu u kojoj ćeš za određeni uslov dati pozitivnu vrednost, za drugi uslov negativnu, uradi sum po toj koloni.
[ popmilan76 @ 23.10.2021. 18:15 ] @
Hvala svima,ne stidoh ranije,uspeo sam da rešim kao dva inner ,prvo left pa right....Međutim,da ne otvaram novu temu,zanima me još nešto...i da li je to moguće...

Imam jedno polje koje je short time,gde upisujem kad je ko zakazao,tj u koje vreme...ono što meni treba jeste da mi izlista vremena koja nisu zakazana,tj upisana...Recimo ovo su zakazana vremena...

08:00 - 09:15
10:00 - 10:30


Da mi pokaže kao rezultat upita 09:15 - 10:00...
[ savkic @ 24.10.2021. 00:56 ] @
> Imam jedno polje koje je short time,gde upisujem kad je ko zakazao,tj u koje vreme...ono što meni treba jeste da mi izlista
> vremena koja nisu zakazana,tj upisana...Recimo ovo su zakazana vremena...
> 08:00 - 09:15
> 10:00 - 10:30
> Da mi pokaže kao rezultat upita 09:15 - 10:00...

Mozda da ubacis novu tabelu sa mogucim svim mogucim terminima u toku dana, npr:
8 - 8:15
8:15 - 8:30
8:30 - 8:45
...
16:30 - 16:45
16:45 - 17:00

I onda uparis tu tabelu sa terminima i tabelu sa zakazanim terminima u toku dana i izvuces sta je preostalo.


[ popmilan76 @ 24.10.2021. 07:25 ] @
Da,mislio sam na isti nacin...ali sam hteo da u drugoj tabeli postavim radno vreme,recimo od 08:00 do 20:00...pa imam rezervaciju od 10:00 do 10:30,pa da mi upit pokaze 08:00- 10:00 i 10:30 - 20:00?I kako to najednostavnije da uradim?Posto cu morati da izdvojim to u poseban upit,posto trenutni mi je vec dosta komplikovan.
[ savkic @ 24.10.2021. 13:28 ] @
Ne znam tacan upit bez podataka, ako koristis posebnu tabelu sa mogucim terminima onda selektujes sve koji ne postoje u tabeli zakazanih termina (koristi u where sekciji not exist).
Ako imas tabelu sa samo radnim vremenom onda ces verovatno morati da pises stored proceduru ili da racunanje radis iz programa.
[ popmilan76 @ 24.10.2021. 15:37 ] @
Imam tabelu,koju pored ostalih polja imaju polje vremepocetka i vremekraja,i polja su datumska,kao shorttime i drugu tabelu bi napravio koja bi imala dva polja,isto shorttime,od i do,gde bi upisao vreme rada lokala,recimo od 08:00 do 20:00.I posle nekih zakazivanja da mi upit da koje vreme je preostalo.Usluga nema odredjeno vreme,tako da za nesto treba pola sata,za nesto sat vremena.
[ Almedin @ 24.10.2021. 21:17 ] @
Ako imaš na raspolaganju window funkciju LEAD
Code:

SELECT
  kraj,
  LEAD(pocetak, 1)
    OVER (ORDER BY pocetak)
    AS next_pocetak
FROM termini
WHERE kraj < next_pocetak
ORDER BY pocetak


Ako nemaš
Code:

SELECT
  t.kraj,
  (
    SELECT MIN(t2.pocetak)
    FROM termini as t2
    WHERE t2.pocetak >= t.pocetak
  ) AS next_pocetak
FROM termini as t
WHERE kraj < next_pocetak
ORDER BY t.pocetak

Dobit ćeš slobodne termine izmedju već zakazanih. Nećeš dobiti ništa ako nemaš zakazanih termina i nećeš dobiti slobodno vrijeme prije prvog termina i nakon zadnjeg, ali to ćeš vjerovatno znati dodati.
[ popmilan76 @ 25.10.2021. 19:10 ] @
Ovde se podaci,verovatno odnose na jednu tabelu...Meni trebaju iz dve tabele,jedna nalozi,gde imam termine koji su zakazani,i polja su vremepocetka i vremekraja i druga tabela koja se zove radnovreme,gde imam upisano od koliko sati krecu termini i sa koliko se zavrsavaju,i ta polja su satiod i satido?
[ Almedin @ 25.10.2021. 20:22 ] @
Zašto ti treba tabela za radno vrijeme?
[ popmilan76 @ 25.10.2021. 20:41 ] @
Tabela radnovreme mi sluzi da znam od koliko krecu termini i do koliko...Dakle,upisem u t2 radno vreme ,recimo od 08:00 do 20:00, a u t1 upisujem zakazane termine
..Pa tako recimo,imam zakazan termin 09:00 do 10:00 i taj upit mi pokazuje da su mi slobodni termini od 08:00 do 09:00 i od 10:00 do 20:00.
[ Almedin @ 26.10.2021. 07:54 ] @
Pitam zašto tabela, koliko tu imaš redova? Radno vrijeme je fiksan podatak, dodas ga u upit. A mislio sam da ćeš moci prilagoditi ove upite što sam pisao. Rekao sam da nece dati upravo to, vrijeme prije prvog rezervisanog i vrijeme nakon zadnjeg rezervisanog. Možeš sa UNION dodati, uzmes pocetak radnog vremena u lijevu kolonu i pocetak prvog rezervisanog termina u desnu i filter gdje provjervas da nisu isti.

Ako imas i dalje problem, daj tacno strukturu tabela.
[ popmilan76 @ 26.10.2021. 08:57 ] @
Sad sam na poslu,pa ne mogu proveriti.Podatak o radnom vremenu je fiksan i samo je jedan rekord u toj tabeli.Prva tabela se zove nalozi,a polja su vremepocetka i vremezavrsetka,tu se upisuju termini i druga tabela sati,i polja satod i satdo,tu je fiksno vreme.
[ Almedin @ 26.10.2021. 11:05 ] @
Jesi li probao upite što sam napisao?
[ popmilan76 @ 26.10.2021. 16:57 ] @
Jesam i nešto baš ne ide...Jel ti nije problem da mi upises to iz moje tabele,kako upit treba da izgleda?Radno vreme jeste fiksni podatak,ali može da bude promenjiv,pa ga ne bi stavljao u kod već u bazu?
[ Almedin @ 26.10.2021. 19:15 ] @
U čemu je problem, kakva je greška?
[ popmilan76 @ 26.10.2021. 19:26 ] @
Ne prijavljuje nikakvu grešku,već prijavi sve podatke,šta god ukucao...Treba mi podatak termina koji nisu rezervisani od 08:00 do 20:00,polja sam već naveo...
[ Almedin @ 27.10.2021. 07:33 ] @
Možeš li pokazati podatke koje imas, upit koji si koristio i rezultat koji si dobio?
[ popmilan76 @ 27.10.2021. 07:49 ] @
Tvoju tabelu termini zamenio sa mojom nalozi,a pocetak i kraj sa mojim poljima u tabeli...Evo ovako,tabela se zove nalozi,i polja su vremepocetka i vremekraja...Tabela izgleda ovako...

Vremepocetka---------------vremekraja
09:00-_-------------------------------10:00
12:00-----------------------------------12:30
...
Meni treba upit koji bi pokazao ovakav rezultat...
08:00-09:00
10:00-12:00
12:30-20:00


[ dule_ns @ 27.10.2021. 08:02 ] @
Ajde daj ddl tabela i podatke za jedan dan, ovako je stvarno konfuzno
[ popmilan76 @ 27.10.2021. 08:21 ] @
Mrzi me da slikam sada i prikazujem ddl...Napisao sam vec tabela u access,zove se nalozi i imam polja vremepocetka i vremekraja,koja su u formatu hh:mm...Meni trebaju vremena koja su slobodna od recimo 08:00 do 20:00 sati...ne znam kako drugacije da objasnim...
[ Almedin @ 27.10.2021. 08:38 ] @
Interesantno, očekuješ pomoć a mrzi te.

Nalozi:
Code:
VREMEPOCETKA VREMEKRAJA
09:00:00.000 10:00:00.000
12:00:00.000 12:30:00.000


Sati:
Code:
SATOD        SATDO
08:00:00.000 20:00:00.000


Sql
Code:
SELECT * FROM
(
  SELECT
    t.vremekraja pocetak,
    (
      SELECT MIN(t2.vremepocetka)
      FROM nalozi as t2
      WHERE t2.vremepocetka >= t.vremekraja
    ) AS kraj
  FROM nalozi as t
  
  UNION
  
  SELECT
    (SELECT MIN(satod) FROM sati) pocetak,
    MIN(vremepocetka) kraj
  FROM nalozi
  
  UNION
  
  SELECT
    MAX(vremekraja) pocetak,
    (SELECT MIN(satdo) FROM sati) kraj
  FROM nalozi
)

WHERE pocetak < kraj
ORDER BY pocetak


Rezultat:
Code:
POCETAK      KRAJ
08:00:00.000 09:00:00.000
10:00:00.000 12:00:00.000
12:30:00.000 20:00:00.000
[ FranjoZG @ 27.10.2021. 08:53 ] @
Ima još jedno rješenje, provjerio sam, radi:
Kreiraš dodatnu tablicu "periodi" u koju upišeš periode u field-ove npr "od" i "do":
08:00 , 09:00
10:00 , 11:00
...

ako se tvoja tablica zove nalozi, tada je sql:
Code:

select periodi.od, periodi.do from periodi
left join nal on nalozi.od = periodi.od
where nalozi.od is null


vjerojatno u uvjet trebaš dodati i datum...
[ Almedin @ 27.10.2021. 09:23 ] @
To nije rješenje jer periodi nisu fiksni.
[ popmilan76 @ 27.10.2021. 09:31 ] @
Da,nisu fiksni periodi....al mi dade neku ideju,možda bih mogao u tabeli imati fiksne periode,dakle...

08:00 - 09:00
09:00 - 10:00
...
19:00 - 20.00

I da moje zakazane termine rasporedim u ove grupacije,ali ne znam kako ću kada prelazi termin u drugu grupaciju...

[ Almedin @ 27.10.2021. 09:40 ] @
Pa dao sam ti kompletno rješenje.
[ popmilan76 @ 27.10.2021. 09:42 ] @
Sad videh i sada ću probati...
[ popmilan76 @ 27.10.2021. 09:47 ] @
Pretpostavlja da ovi pocetak i kraj,pre treba da bude as...
[ Almedin @ 27.10.2021. 10:17 ] @
Da, u Accessu treba AS.
[ popmilan76 @ 27.10.2021. 10:29 ] @
Testirao sam i radi,jedino ne prikazuje ono od 08:00,tj onaj deo min(satod) from sati...I ako može da ono krajnje vreme bude u formatu 20:00 a ne 20:00:00.Hvala ti do neba,šta da ti kažem...puno si mi pomogao..
[ Almedin @ 27.10.2021. 10:38 ] @
Kako ne prikazuje? Nema uopšte tog reda?
[ popmilan76 @ 27.10.2021. 10:47 ] @
Da,ne prikazuje od pocetka rada,tj od 08:00(a to polje satod jeste 08:00)..

[ Almedin @ 27.10.2021. 10:52 ] @
Sta pokaze kada u ovom dijelu

WHERE pocetak < kraj
ORDER BY pocetak

Obrišeš liniji where
[ popmilan76 @ 27.10.2021. 11:15 ] @

Code:

pocetak kraj


: :
11:20 12:00
12:40 14:30
14:45 20:00:00
14:45
8:00:00 :

Code:
[ Almedin @ 27.10.2021. 13:30 ] @
Jesi li kopirao ili kucao upit? Pokaži tačan upit koji izvršavaš.
[ popmilan76 @ 27.10.2021. 14:14 ] @
Upit sam kopirao i ispravio ono gde je izostavljeno as,i prikaz je u access-u...i tabela sati ima samo jedan record,tako da nije potrebno min ili max,i taj record je za polje satod 08:00,a za satdo je 20:00.
[ Almedin @ 27.10.2021. 14:59 ] @
Izvini ali moram reći da si prilično nekooperativan u situaciji gdje ti treba pomoć i drugi se trude da ti pomognu.

Kreirao sam sve u Accessu i kod mene radi tako da si vjerovatno pogriješio u kopiranju i ispravljanju SQL upita.

nalozi
Code:
vremepocetka vremekraja
09:00:00     10:00:00
12:00:00     12:30:00


sati
Code:
satod    satdo
08:00:00 20:00:00


sql upit
Code:
SELECT * FROM
(
  SELECT
    t.vremekraja AS pocetak,
    (
      SELECT MIN(t2.vremepocetka)
      FROM nalozi as t2
      WHERE t2.vremepocetka >= t.vremekraja
    ) AS kraj
  FROM nalozi as t
  
  UNION
  
  SELECT
    (SELECT MIN(satod) FROM sati) AS pocetak,
    MIN(vremepocetka) AS kraj
  FROM nalozi
  
  UNION
  
  SELECT
    MAX(vremekraja) AS pocetak,
    (SELECT MIN(satdo) FROM sati) AS kraj
  FROM nalozi
)

WHERE pocetak < kraj
ORDER BY pocetak


rezultat upita
Code:
pocetak  kraj
08:00:00 09:00:00
10:00:00 12:00:00
12:30:00 20:00:00
[ popmilan76 @ 27.10.2021. 15:22 ] @
Ne,nego ako moze pomoc,moze,ne bih da ispadne da se mora,tebi hvala svakako.Aj prekopiracu i ja moje podatke,pa cemo videti...
[ popmilan76 @ 27.10.2021. 20:49 ] @
Ovo je moj kod,odnosno onaj tvoj,...

Code:


SELECT *
FROM (SELECT
t.vremekraja as pocetak,
(
SELECT MIN(t2.vremepocetka)
FROM nalozi as t2
WHERE t2.vremepocetka >= t.vremekraja
) AS kraj
FROM nalozi as t

UNION

SELECT
(SELECT MIN(satod) FROM sati) as pocetak,
MIN(vremepocetka) as kraj
FROM nalozi

UNION

SELECT
MAX(vremekraja) as pocetak,
(SELECT MIN(satdo) FROM sati) as kraj
FROM nalozi
)
WHERE pocetak < kraj
ORDER BY pocetak;
[ popmilan76 @ 27.10.2021. 21:09 ] @
I još nešto je zanimljivo,kada izbacim u potpunosti ovaj deo...

Code:


UNION

SELECT
(SELECT min(satod) FROM sati) as pocetak,
MIN(vremepocetka) as kraj
FROM nalozi

Citat:


Isto se dešava,pokazuje isto,kao i sa tim delom...
[ Almedin @ 28.10.2021. 07:17 ] @
Izlistaj ovdje obje tabele, ja u tabeli imam tačno ono sto sam pokazao.
[ salvaric @ 28.10.2021. 07:25 ] @
Almedin ti je dao najelegantniji način kako to da rešiš, i radi provereno.

Proveri da li si dobro dizajnirao polja u tabelama (vremepocetka,vremekraja, satiod i satido), moraju biti Date/Time tipa, a format prikaza možeš staviti kakav hoćeš (short,long i medium time).

U tabelu nalozi unesi malo više termina pa testiraj.

Ako je sve kakao treba, nema razloga da ne radit dati kod.

Pozdrav!
[ popmilan76 @ 28.10.2021. 10:15 ] @
Ok.Probacu danas popodne.Upisacu nove podatke,pa probati.Hvala svima,svakako.
[ popmilan76 @ 28.10.2021. 15:21 ] @
Naravno greška je bila kod mene,polja vremepocetka i vremekraja su bili string,a ne datetime...Da li ono što si rekao za dane gde nemam termina,da će upit biti prazan i dalje važi?
[ Almedin @ 28.10.2021. 15:24 ] @
Obrisano

[Ovu poruku je menjao Almedin dana 28.10.2021. u 16:39 GMT+1]
[ Almedin @ 28.10.2021. 15:33 ] @
Treba tinjos jedan UNION gdje ces uzeti satod i satdo uz uslov da nema redova u tabeli nalozi.
[ Almedin @ 28.10.2021. 15:36 ] @
Code:
... 
UNION

SELECT
  satod AS pocetak,
  satdo AS kraj
FROM sati
WHERE NOT EXISTS
(
  SELECT * FROM nalozi
)
[ popmilan76 @ 28.10.2021. 15:44 ] @
Aha...ok,hvala puno.
[ Almedin @ 28.10.2021. 17:29 ] @
Jedna napomena, u svemu do sada rečenom nema datuma, nisi pominjao kolonu datum nego samo vrijeme tako da upit koji sam napisao ne vodi računa o datumima. Ne znam kako si to zamislio.
[ popmilan76 @ 28.10.2021. 18:46 ] @
Imam datum,on je posebno polje,to ću već znati.Hvala.
[ Milan Milosevic @ 02.11.2021. 06:49 ] @
Sad kada si promenio iz string u DateTime verovatno si pokvario nešto drugo. Proveri da li ti sve ostalo radi.
[ popmilan76 @ 02.11.2021. 09:47 ] @
Jesam,i sve sam promenio,tako da je to sve ok sada...