2012. szeptember 8., szombat

Rendelések közt eltelt idő

Mit tudunk csinálni, ha szeretnénk látni ügyfelenként az egyes rendelések közt eltelt időt? Az adatainkat általában egy adatbázisban tároljuk, ezért mindenképpen lekérdezést kell írnunk. Az alábbi lehetőségek közül választhatunk:

  1. A lekérdezés eredményét kitesszük excelbe, sorba rendezzük (ha nem tettük volna meg a lekérdezésben), majd az így kapott adattábla utolsó oszlopa utáni cellákban kiszámítjuk az aktuális és az előző sorban szereplő dátumok közti különbséget.
  2. Már magában a lekérdezésben kiszámítjuk a rendelések közt eltelt időt. Ekkor az alábbihoz hasonló SQL lekérdezést kell írnunk:
    • Adott a rendeléseket tartalmazó tábla (view): Rendelesek

      SELECT partner_id,
                     rendeles_datum,
                     (rendeles_datum-elozo_rendeles_datum) eltelt_napok
        FROM (SELECT R1.partner_id,
                                     R1.rendeles_datum,
                                     (SELECT max(R3.rendeles_datum)
                                         FROM Rendelesek R3
                                       WHERE R3.rendeles_datum > R1.rendeles_datum
                                             AND R3.partner_id = R1.partner_id) elozo_rendeles_datum
                        FROM Rendelesek R1, Rendelesek R2)

      Persze ezt még meg lehet bolondítani azzal, hogy számoljuk ki a rendelések összegét, a pótrendeléseket (kis összegű, a normál megrendelést pár napon belül közvetlenül követő) ne vegyük figyelembe, stb.

    • Amennyiben csak az ügyfelek átlagos rendelési gyakoriságára vagyunk kíváncsiak, van egyszerűbb megoldás is. Vegyük a legkésőbbi és legkorábbi rendelési dátumot, és osszuk el a rendelések közti időszakok számával. Íme:

      SELECT partner_id,
                     ( max(rendeles_datum) - min(rendeles_datum) ) / ( count(*) - 1 )
         FROM Rendelesek
       GROUP BY partner_id
      HAVING COUNT (*) > 1 -- Az 1 rendeléssel rendelkezőknél nem értelmezett az átlagos gyakoriság!






0 megjegyzés:

Megjegyzés küldése