Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc kod upita - odbaciti nepotrebne

[es] :: MySQL :: Pomoc kod upita - odbaciti nepotrebne

[ Pregleda: 10729 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Orome
programer

Član broj: 273201
Poruke: 115
*.telrad.net.



+1 Profil

icon Pomoc kod upita - odbaciti nepotrebne13.06.2017. u 19:35 - pre 90 meseci
Imam sledecu situaciju u bazi

godina - artikl
2015 - 40
2016 - 40
2017 - 40
---------------
2015 - 41
2017 - 41
----------------
2016 - 50
2017 - 50
----------------
2017 - 55

potrebni su mi artikli koji postoje ili u sve tri godine (2015, 2016, 2017) ili u poslednje dve (2016, 2017) ili u poslednjoj 2017. Treba mi nacin da iskljucim artikl 41 koji postoji samo u 2015 i 2017. Jedino artikl 41 ne zadovoljava uslov za prikaz. Svaka pomoc je dobrodosla. Hvala unapred.

Edit : ili da ga iskljucim skroz ili da iskljucim samo red sa 2015 godinom kod artikla 41. Znaci ili skroz ili samo godinu koja nema 'nastavak' u sledecoj.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Pomoc kod upita - odbaciti nepotrebne13.06.2017. u 21:23 - pre 90 meseci
Sa tim editom na kraju si ga za*rao, sad ne razumem ništa. Da li ti trebaju artikli koji nemaju "rupe"?
 
Odgovor na temu

Orome
programer

Član broj: 273201
Poruke: 115
81.93.74.*



+1 Profil

icon Re: Pomoc kod upita - odbaciti nepotrebne14.06.2017. u 06:03 - pre 90 meseci
pomoglo bi mi da ih izbacim skroz iz rezultata ili da zadrzim samo drugi red u kom je 2017. bilo sta od to dvoje. da napomenem da ne mora maksimalno biti 3 godine, moze i vise. u bilo kojoj situaciji mi trebaju samo oni koji se pojavljuju bez rupa kroz godine.
 
Odgovor na temu

anon115774

Član broj: 115774
Poruke: 1656



+920 Profil

icon Re: Pomoc kod upita - odbaciti nepotrebne14.06.2017. u 09:51 - pre 90 meseci
Ako uzmemo u obzir da se tvoja tabela zove 'artikli' prvo napravis tabelu koja ce da sadrzi sve moguce kombinacije godina i artikala...

Code:

create temporary table if not exists table1 as (
select distinct t1.artikal, t2.godina
from artikli as t1
cross join artikli as t2
)


Onda proveris koji sve zaista postoje odnosno ne postoje...

Code:

create temporary table if not exists table2 as (
select distinct t1.artikal
from table1 as t1
left join artikli as t2
on t1.godina = t2.godina
and t1.artikal = t2.artikal
where t2.godina is null
)


Kada si dobio one koji ne postoje onda uzmes samo one koji postoje...

Code:

select *
from artikli as t1
where t1.artikal not in (select artikal from table2)


Napisao sam ovo sve na brzinu pa javi ako ima nekih problema i gde :)
 
Odgovor na temu

Orome
programer

Član broj: 273201
Poruke: 115
81.93.74.*



+1 Profil

icon Re: Pomoc kod upita - odbaciti nepotrebne14.06.2017. u 10:15 - pre 90 meseci
pazi, mozda sam i na drugi nacin sada prevazisao problem pa mi odgovor i ne treba. Ali zarad odgovora tvoj predlog skripi jer ja treba da znam da li fali unutrasnja godina (2016 u primeru artikla 41) jer mi samo to zadovoljava uslov da ga ne prikazem. Ako je situacija kao kod artikla 50 iz primera njega ne treba da eliminisem iako ne postoji u 2015 godini. ja ne umem nedvosmisleno ni da objasnim problem ne zato sto sam nepismen nego je specifican uslov u pitanju.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Pomoc kod upita - odbaciti nepotrebne14.06.2017. u 10:21 - pre 90 meseci
Pod pretpostavkom da ti je (godina, artikl) unique, možeš početi od nečega ovakvog:

Code:

select artikal, max(godina) as max_godina
from prodaja
group by artikal
having count(*) = max(godina) - min(godina) + 1;


pa onda to koristiti kao unutrašnji upit ili view za dalje.

Može i JOIN-ovima kako je informer krenuo, ali malo je teže.
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Pomoc kod upita - odbaciti nepotrebne14.06.2017. u 10:25 - pre 90 meseci
@Informer

Ovo je u principu OK, pronalazi sve artikle koji se pojavljuju u svim godinama.
Dakle, ako se negde pojavi rupa - taj artikal neće biti u rezultatima.

Međutim, koliko sam ja shvatio - početak nije rupa i to pravi dodatni problem:
Code:

Godine: 2015, 2016, 2017, 2018, 2019, 2020

A se pojavljuje u: 2019, 2020
B se pojavljuje u: 2020
C se pojavljuje u: 2018
D se pojavljuje u: 2015, 2016, 2017, 2018, 2019, 2020
E se pojavljuje u: 2017, 2018, 2019

A, B, D bi trebali da budu u rezultatima. C, E ne bi smeli.

@Orome

Uradi join na jablanov upit po artikal = artikal i max_godina = globalna_max_godina i to je to.

[Ovu poruku je menjao dusans dana 14.06.2017. u 11:39 GMT+1]
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Pomoc kod upita - odbaciti nepotrebne14.06.2017. u 11:00 - pre 90 meseci
Traženje artikala sa rupama uz pomoć JOIN-ova (bez potrebe za tabelom sa godinama):

Code:

select * from prodaja p1
left join prodaja p2 on p1.artikal = p2.artikal and p1.godina = p2.godina + 1
left join prodaja p3 on p1.artikal = p3.artikal and p3.godina < p1.godina
left join prodaja p4 on p1.artikal = p4.artikal and p4.godina = p3.godina + 1
where p2.artikal IS NOT NULL and p4.artikal IS NULL;


jbg komplikovano je.
 
Odgovor na temu

anon115774

Član broj: 115774
Poruke: 1656



+920 Profil

icon Re: Pomoc kod upita - odbaciti nepotrebne14.06.2017. u 11:27 - pre 90 meseci
Ok, nisam shvatio da se rupom podrazumva samo kad je vec bio tu pa ga sad nema... moja greska.
 
Odgovor na temu

[es] :: MySQL :: Pomoc kod upita - odbaciti nepotrebne

[ Pregleda: 10729 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.