Keresés

Új hozzászólás Aktív témák

  • Agony

    aktív tag

    válasz Ispy #4249 üzenetére

    Köszi, a gond az volt, hogy a kezdő időpontot az egyik sor tartalmazta a befejező időpontot meg ugye az azt követő.

    Végül sikerült megszülni a megoldást. Feljoinoltam a feladat táblát saját magára, csak egy sor eltolással, így már megvolt a kezdő- és záró időpont a datediffhez és a sum is működött.

    (select
    sum(datediff(second,f.idopont,f2.idopont))
    from feladat f join feladat f2 on f.igenykod=f2.igenykod and f.tetelzam+1=f2.tetelszam
    where f.igenykod=igenyek.igenykod)

    Köszönöm szépen a választ! :R

  • Agony

    aktív tag

    Sziasztok!

    SQL lekérdezés kapcsán lenne szükségem egy kis útmutatásra és bízom a szaktudásotokban, mert én elvesztettem a fonalat. :)

    Adott egy igény lista tábla, amin belül van egy feladatok tábla, tehát valaki indít egy igényt és azon belül akár több feladat is elvégezhető különböző személyek által. A feladatok elvégzésére fordított időt kellene összesíteni feladatonként, viszont a helyzetet bonyolítja, hogy bármikor megszakíthatják a feladatvégzés, amit aztán később folytatnak. Pl. munkaidő végén felfüggesztik, reggel pedig folytatják.

    Valami SUM-al kombinált DATEDIFF szerűség kellene, de mivel többször megszakíthatnak és folytathatnak egy igényt, ötletem sincs hogyan...

    Például:

    Igény: Vevő megrendelés

    Ezen belül vannak a feladatok az alábbi formában:

    Feladat kezdés
    A megrendelt áru összekészítése.
    Feladat befejezés

    Feladat kezdés
    A megrendelt áru csomagolása és átadása kiszállításra.
    Feladat befejezés

    Feladat kezdés
    A megrendelt áru kiszállítása.
    Feladat befejezés

    Minden feladat kezdés és feladat befejezés tartalmaz egy időbélyegzőt, szóval a kezdés és a befejezés között kellene mondjuk egy különbözet percben, aztán ezt az egészet összegezni az igényre. Tehát az összekészítés mondjuk 5 perc volt, a csomagolás 3 perc, a kiszállítás pedig 40 perc, így az igény 48 perc munkaidő volt. Maguk a feladatok nem számítanak, minden esetben csak a kezdés és befejezés állapot között eltelt idő és ezeknek az összege.

    Előre is köszönöm a segítséget! :R

  • Agony

    aktív tag

    válasz Apollo17hu #2471 üzenetére

    Köszönöm a válaszokat! :)

    Megoldható, mert láttam ilyet működés közben, de sajnos nem jöttem rá, mi alapján dobja szét a nevezéseket.
    Egyébként úgy van ahogy írod Apollo, minden több lóval induló lovast a beérkezett nevezés mennyiségen arányosan szétoszt.

    Itt látható egy példa a startlista fülre kattintva. Az a lovas aki 3 lóval megy az elejére-közepére-végére van elhelyezve, akik pedig 2 lóval mennek azok az elejére és a végére.

  • Agony

    aktív tag

    Sziasztok!

    Szerintetek megvalósítható az alábbi elképzelés egy SQL lekérdezéssel?

    Adott egy tábla ami tárolja a versenyekre a nevezéseket. Egy versenyre mondjuk beérkezik 30 nevezés, de egy versenyre ugyanaz az ember akár háromszor is jelentkezhet különböző lovakkal. Ez simán le is lehet kérdezni és megvan, hogy kik indulnak az adott versenyen/versenyszámban.
    Viszont felmerült egy olyan igény, hogy szeretnék ha a nevezési listában több lóval induló személy nevezéseit a beérkezett nevezések között arányosan osztaná meg a lekérdezés, hogy legyen ideje átülni egy másik lóra.

    Tehát ha egy ember egy lóval indul teljesen mindegy hányadik a sorban, viszont ha egy ember 4 lóval megy, akkor úgy kellene listáznia a nevezéseket, hogy ez az ember legyen az első, a tizedik, a huszadik és a harmincadik induló a 30 nevezővel rendelkező versenyen.

    A nevezésről most ezek az információk állnak rendelkezésre:

    lovas varchar(100)
    Lovas nevét tárolja

    lo varchar(100)
    A ló nevét tárolja

    username varchar(100)
    A nevező felhasználót tárolja, hogy lekérdesse és módosíthassa a saját nevezéseit.

    egyesulet varchar(100)
    A lovas egyesületének nevét tárolja

    edzo varchar(100)
    Az edző nevét tárolja

    verseny varchar(100)
    A verseny kódját tárolja ami a category táblával van kapcsolatban a verseny adataiért ha szükséges.

    versenyszam varchar(100)
    A versenyszámot tárolja.

    nevezes datetime
    A nevezés beérkezésének pontos idejét tárolja.

    id int(11) AUTO_INCREMENT
    A beérkező nevezéseket sorszámozza.

    Előre is köszönöm az ötleteket! :)

  • Agony

    aktív tag

    válasz Apollo17hu #2423 üzenetére

    Azért raktam be őket, mert amúgy rengeteg felesleges számot hoz az oszlopokhoz. Pl. dátumokat másodpercekig lebontva, összegeket meg több mint 5 tizedesjegyig.

    Végül a nullával osztásra is kitaláltam egy barkács megoldást, úgyhogy benne maradt a %-os Árrés is:

    case t.EGYSAR < '1' then '0'
    else convert(varchar(20),cast((t.KEDV/t.EGYSAR)*100 as decimal(15,2))) end as 'Kedv %',

    Lényegében ugyanaz mint amit te irtál, bár a tied szakszerűbbnek tűnik. :)

  • Agony

    aktív tag

    válasz Agony #2421 üzenetére

    Meg is lett, csak a szerkesztés már inaktív lett. Vannak felvíve a számlákra kuponok is cikként amiknek 0Ft az ára, így viszont a

    convert(varchar(20),cast((t.KEDV/t.EGYSAR)*100 as decimal(15,2))) as 'Kedvezmény (%)'

    sor nullával osztás miatt elszáll, na de %-ot majd számolgat mindenki excelben. :)

  • Agony

    aktív tag

    válasz Apollo17hu #2420 üzenetére

    Köszi, igy, hogy áttettem azokat is LEFT-re most jön a megfelelő mennyiségű rekord. Most nullával osztás miatt száll el, de valami a BEKERÁR körül van, mert azt kivéve, tökéletes.

    Kapirgálok még egy kicsit, köszi! :)

  • Agony

    aktív tag

    Sziasztok!

    Most kezdtem ismerkedni az SQL lekérdezésekkel, mert a cégnél egyre többször van szükségünk olyan adatokra, amik alapesetben nem kinyerhetőek a vállalatirányítási rendszerből viszont egyéni lekérdezéssel hozzájuk lehet férni.

    Csináltam egy értékesítésre vonatkozó lekérdezést, de kevesebb eredményt sort hoz, mint amennyi valójában van. 48520 rekordot kellene hoznia, de csak 46686-ot hoz.
    Azt sikerült megtalálnom megtalálnom, hogy mi okozza, de már 1,5 órája guggolok afölött a 2 sor fölött és sehogy sem sikerül megvilágosodni.

    Ránéznétek a kódra, hogy mi az error?

    LINK

    A hibát ez a rész okozza, mert a k táblában az IDEGENMEGRSZAM mező nem minden esetben tartalmaz értéket, van ahol NULL. Ezért is próbálkoztam a LEFT JOIN-nal, mert a KUPONNÁL és KAMPÁNYNÁL is ez volt a helyzet és ott bevált.

    LEFT JOIN BEREND g ON k.IDEGENMEGRSZAM = g.BIZONYLATSZAM
    INNER JOIN (select BIZTIPUSKOD, BIZTIPUSNEV from BIZTIPUS i) i ON g.BTKOD = i.BIZTIPUSKOD

    Előre is elnézést kérek, szakmai szemmel biztos nem egy gyönyör a kód, de csak amatőrködöm. :)

    (SQL Server 2012 SP1)

    Előre is köszönöm a segítséget!

    Üdv,
    Levi

Új hozzászólás Aktív témák

Hirdetés