Lekérdezés sok feltétellel, adatok csoportosítása

Sziasztok!

Adott egy raktár adatbázis és annak egy táblája. A táblában raktározott egységek, raklapok vannak. Ezeknek a raklapoknak van betározási és kitározási dátumuk. Egy olyan lekérdezést kell készítenek ami egy bizonyos elszámolási időszakot vesz alapul.

szerk.:

Az alábbi kimenetet szeretném kapni nagyjából:

A képet a Képfeltöltés.hu tárolja.

Tehát úgy kellene csoportosítani az adatokat, hogy azok a szállítólevél számú egységek amik az adott elszámolási időszakban vagy betárolásra kerültek vagy kitárolásra kerültek kerüljenek egy csoportba külön betár és külön kitár részbe.

Még annyi adalék, hogy vannak olyan egységek amik korábban lettek betárolva mint az elszámolási időszak kezdete, de még nem lettek kitárolásra. Ebben az esetbe az első naphoz kell ezeket az egységeket tenni. Gondolkodtam a GROUP_CONCAT vagy a SUBSELECT megoldásokkal, de eddig még sajnos nem sikerült megoldanom. Mivel nagy adatmennyiségekről van szó ezért mindenképpen Mysql lekérdezéssel szeretném megvalósítani.

Remélem érthetően le tudtam írni problémát. Köszönöm ha segítesz!

Hozzászólások

Ok. Kezdjük az elején.
Kérlek vázold újra a kimenetet amit szeretnél kapni. Tényleg ennyi kötőjelet, és sortörést szeretnél bele? Kétszer egymás után a szállev és raklap oszlopokat?
(és csak a harmadik, vagy minden harmadik legyen hoszabb mint a többi?)
(Ha nem szeretenéd a betarolva,kitarolva oszlopokat. Akkor ne hozd őket létre. (Amúgy az egyik miért egy 1 soros CASE míg a másik IF?))

Kettő, mi a kimenet amit jelenleg kapsz? De akár mi a tábla? Mondjuk 20-30 mintasor (lefedve az eseteket) sémával sokat egyszerüsítene.

Három, mit jelent a sok adat? Mennyi sor? Milyen gyakran jön ilyen lekérdezés?

Négy, WHEN (kitardatum = '".$startdate." 00:00:00') THEN DATEDIFF(kitardatum,'".$startdate." 00:00:00')+1 END) ... reggel van... de ha jól értem. akkor Ha a két érték egyenlő.. akkor vegyük a különbségüket(remélhetőleg ugye nulla), és adjunk hozzá egyet.

Öt, ha már string building, és dupla idézőjel, akkor igazán felesleges a ... ".$valtozo." ... forma.

### ()__))____________)~~~ ########################
# "Do what you want, but do it right" # X220/Arch

Szia!

Módosítottam a leírást és kivettem a lekérdezést, mert úgy látom, hogy zavaró lehet. A lényeg, hogy pl. azok az egységek kerüljenek egy-egy csoportba a február 2-hoz amiknek a betárolási vagy a kitárolási dátuma február 2.

Ha mondjuk van olyan tétel aminek a betárolási dátuma kisebb mint az elszámolási időszak kezdete és a kitárolási dátuma pedig nulla, vagyis még nem lett kitárolva, akkor azt megegyezés szerint az elszámolási időszak első napjához kell sorolni.

Példa 1. Elszámolási időszak 2016.02.01-2016.02.29
betárolási dátum: 2016.01.15
kitárolási dátum: 0000-00-00 00:00:00

Akkor az egységet az elszámolási időszak első napjához kell tenni.

Példa 2. Elszámolási időszak 2016.02.01-2016.02.29
betárolási dátum: 2016.02.15
kitárolási dátum: 0000-00-00 00:00:00

Akkor az egység száll.lev számát a 2016.02.15 -höz kell sorolni. Ebben az esetben mozgatási díjról is beszélünk illetve Az elszámolási időszak végéhez képest hány napig lett tárolva az egység. Ebben az esetben 15 nap a tárolások száma.

Még magam is gyűjtöm az infót a megrendelőtől, mert nem teljesen világos számomra se sok minden.

Példa 3. Elszámolási időszak 2016.02.01-2016.02.29
betárolási dátum: 2016.02.15
kitárolási dátum: 2016.02.20

Ebben az esetben a betár száll. lev száma a 2016.02.15-höz a kitár száll. lev szám pedig a 2016.02.20 dátumhoz kell kerülnie. Tárolások napok száma 6.

Remélem így pontosabb amit szeretnék.