[ Orome @ 15.11.2017. 13:44 ] @
Pozdrav, potreban mi je upit koji vraca zadnji dan svakog meseca iz izabranog perioda. Ulazni parametri su mi pocetni i krajnji datum. To mi treba bez tabele jer kapiram da je brze nego da skeniram moju tabelu u kojoj imam mnogo redova pa izvlacim ovaj podatak.

Pisano nekim pseudo kodom ovo mi treba :

SELECT LAST_DAY(_date) FROM DUAL WHERE _date BETWEEN start_date AND end_date

Ovaj kod radi nad mojom tabelom ali ima jako puno redova i nemam mogućnost da rezultat skratim tako da radi brzo :

SELECT LAST_DAY(t1.date) date
FROM t1
WHERE t1.datum>=('2017-07-01') AND t1.datum<=('2017-08-31')
GROUP BY MONTH(t1.date)

Ocekivani rezultat ovog upita su 2 reda jer je pocetni datum u julu a krajnji u avgustu, znaci 2 mjeseca, evo rezultata :
31.07.2017
31.08.2017


Imam osecaj da se ovo mora da moze da se izvuce bez tabela, putem one DUAL tabele ili cega li. Nisam mogao pronaci kako da to izvedem. Ako moze da se ne predlaze optimizacija mog upita koji sada radi jer sam to vec probao i ne uspeva.

Hvala unapred.
[ jablan @ 15.11.2017. 15:11 ] @
Šta je dual tabela?
[ Branimir Maksimovic @ 15.11.2017. 15:21 ] @
Svaki jezik danas ima biblioteku za manipulaciju datumima, ne kapiram sta ce mu baza za ovo?
[ Orome @ 15.11.2017. 15:23 ] @
Dual tabela je Dummy tabela ukoliko hoces da nesto probas pa ti treba select a nemas tabelu. Mozes napisati FROM Dual i MySql ne javlja gresku.


Inace, pronasao sam i doradio upit na netu koji radi. Postavicu ga ovde sutra nisam pri racunaru sada.
[ Orome @ 15.11.2017. 15:30 ] @
@Branimir Maksimovic ovo mi treba u bazi podataka i deo je veceg upita. Trenutni upit je jako spor i ukapirao sam da ce nacin bez moje tabele raditi mnogo brze. Postavicu sutra upit pa prokomentarisi slobodno.
[ jablan @ 15.11.2017. 15:58 ] @
Citat:
Branimir Maksimovic:
Svaki jezik danas ima biblioteku za manipulaciju datumima, ne kapiram sta ce mu baza za ovo?

Često se u praksi dešava da se zahtev promeni sa "poslednji dan u mesecu" na "poslednji radni dan u mesecu", i onda ti biblioteka za manipulaciju datumima ne znači ništa, a ako radiš sa bazom promena može da bude trivijalna (naravno, zavisi i kako si implementirao stvari u bazi). Ne kažem da uvek treba raditi sa bazom, ali nekad ima logike i ne razmatrati druga rešenja.
[ Branimir Maksimovic @ 15.11.2017. 16:36 ] @
Kako god, kad nemas tabelu sa kojom radis uvek je lakse izvesti racunicu u necemu drugom osim SQL-a ;p
[ Orome @ 15.11.2017. 17:03 ] @
Branimire treba mi upit sa kolonom poslednji datum u mesecu sa presekom na taj dan i jos mnogo toga. sve to eksportujem u Excel. zelim da to radim iz baze jer su mi svi podaci tu. zasto bih to radio u programskom jeziku kad su mi svi podaci u bazi?

i jedan savet, umesto da pitas sta ce ti to trebao bi da pomognes ako mozes a ne da pises postove koji apsolutno ne pomazu?! ne vidim svrhu tvojih postova.

sutra cu postaviti upit.
[ Branimir Maksimovic @ 15.11.2017. 17:14 ] @
Nijednom nisam odgovorio tebi nego Jablanu... svrha mog posta je da ti pomogne, ako ti to ne vidis, svakom svoje...
[ oracle_kid @ 15.11.2017. 18:08 ] @
nista ne razumem, pa za mysql nema Date funkciju
koja bi mogla kao
select lastdate(date(prvidatum) ) as begindate,lastdate(date(drugidatum)) as enddate itd..
[ Orome @ 15.11.2017. 19:03 ] @
ovaj kod mi daje ono sto sam trazio, promenio sam ga onako kako mi odgovara, za izvrsavanje nije potrebno imati nijednu tabelu. izvrsi se veoma brzo, mnogo brze nego sto sam ja mogao izvuci iz svoje tabele. period sam namestio od 01.07.2017 do 15.11.2017.

Code:

SELECT 
LAST_DAY(DATE_FORMAT(m1, '%Y-%m-%d')) datum

FROM
(
SELECT 
('2017-07-01' - INTERVAL DAYOFMONTH('2017-07-01')-1 DAY) 
+INTERVAL m MONTH AS m1
FROM
(
SELECT @rownum:=@rownum+1 AS m FROM
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) t1,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) t2,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) t3,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) t4,
(SELECT @rownum:=-1) t0
) d1
) d2 
WHERE m1<='2017-11-15'
ORDER BY m1