Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πρόβλημα σε sql για υπολογισμό κατανάλωσης καυσίμου

Îåêßíçóå áðü ôï ìÝëïò nikolasxm. Τελευταία δημοσίευση από το μέλος nikolasxm στις 18-03-2009, 10:09. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-03-2009, 15:01 49274

    Πρόβλημα σε sql για υπολογισμό κατανάλωσης καυσίμου

    Γειά σας παιδιά
    Με ταλαιπωρεί εδώ και 2 μέρες ενα πρόβλημα που είμαι σίγουρος ότι για έναν έμπειρο σε SQL θα είναι πολύ απλό
     
    Έχω 1 πίνακα με όνομα "ΚΑΤΑΓΡΑΦΕΣ" όπου καταγράφω μεταξύ αλλών το πόσες φορές βάζει καύσιμα
     Τα πεδία και καποια δεδομένα είναι:
     
    ΟΧΗΜΑ            ΕΝΔΕΙΞΗ(ΧΙΛΙΟΜΕΤΡΗΤΗ)      ΛΙΤΡΑ
    ΖΥΒ7568              100500                             25,20
    ΖΥΒ7568              100625                             25,18
    ΖΙΜ6587                87600                             26,32
    ΖΥΒ7568              100760                             25,12
    ΖΙΜ6587                87750                             26,18
     
    Κάθε εγγραφή καταχωρέιται τη στγμή ανευφοδιασμού του οχήματος
     
    Έτσι λοίπον θα ήθελα ένα (απλό;) query που θα μου δίνει το αποτέλεσμα
     
    ΖΥΒ7568      125          25,20
    ΖΙΜ6587      150          26,32
    ΖΥΒ7568      135          25,18
     
    Δηλαδή την κατανάλωση καυσίμου σε κάθε ανεφοδιασμό των οχημάτων
    Με προβληματίζει που δεν θα πρεπει να λαμβάνω υπόψιν μου την τελευταία εγγραφή λίτρου απο κάθε ανεφοδιασμό
    Θα με βοηθούσε πολύ οποιαδήποτε ιδέα σας
     
    Ευχαριστω
  •  17-03-2009, 17:23 49291 σε απάντηση της 49274

    Απ: Πρόβλημα σε sql για υπολογισμό κατανάλωσης καυσίμου

    Έτσι όπως είναι οι εγγραφές μέσα στη βάση σου δεν θα τα καταφέρεις. Θα πρέπει να έχεις ένα πεδίο, που να δίνει ιστορικότητα στις εγγραφές σου, μια ημερομηνία πχ, πότε πάρθηκε η μέτρησή από το κάθε όχημα.

    Λογικά σκεπτόμενος, για να μπορέσεις να υπολογίσεις ποια είναι η χιλιομετρική διαφορά, θα πρέπει να ξέρεις ποια ήταν η τιμή του χιλιομετρικού ενδείκτη την προηγούμενη φορά που το όχημα είχε βάλει βενζίνη. Ο αντίστοιχος SQL κώδικας θα είναι κάπως έτσι:

    SELECT 
     Counter.CarFilled, 
     (Select Top 1 history.Meter from [Counter] history Order by history.CarFilled DESC ) AS LastFilled,
     Counter.Meter, 
     Counter.LitresFiller
    FROM [Counter];

    αν ο πίνακάς σου έχει τα πεδία DateFilled (πότε γέμισε), CarFilled (ποιο αυτοκίνητο), Meter (ένδειξη), LitersFilled (λίτρα καυσίμου)

     

    George J.

     


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  17-03-2009, 18:48 49297 σε απάντηση της 49274

    Απ: Πρόβλημα σε sql για υπολογισμό κατανάλωσης καυσίμου

    Θα μπορούσες πάλι να βάλεις ένα πεδίο δείκτη για κάθε αυτοκίνητο η τιμή του οποίου θα προσαυξανόταν κατά μία μονάδα κάθε φορά που θα έβαζε βενζίνη. Για παράδειγμα:

    ΟΧΗΜΑ            ΕΝΔΕΙΞΗ(ΧΙΛΙΟΜΕΤΡΗΤΗ)      ΛΙΤΡΑ   FillNumber
    ΖΥΒ7568              100500                             25,20      1
    ΖΥΒ7568              100625                             25,18      2
    ΖΙΜ6587                87600                             26,32      1
    ΖΥΒ7568              100760                             25,12      3
    ΖΙΜ6587                87750                             26,18      2
     
    Αντί δηλαδή να κάνεις άμεσα το Insert, να υπολογίζεις τη μέγιστη τιμή που έχει το FillNumber για το αυτοκίνητο που κάνεις τη μέτρηση, να την προσαυξάνεις κατά μία μονάδα και στη συνέχεια να κάνεις το Insert. Στη συνέχεια, μπορείς να πάρεις αυτό που θέλεις με ένα self join:
     
    SELECT     s1.CarID, s1.MeterReading AS PreviousMeterReading, s2.MeterReading AS NextMeterReading, s2.MeterReading-s1.MeterReading As Distance
    FROM         dbo.GasFill AS s1 LEFT OUTER JOIN
    dbo.GasFill AS s2 ON s1.CarID = s2.CarID AND s1.FillNumber = s2.FillNumber - 1

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  18-03-2009, 09:54 49326 σε απάντηση της 49274

    Απ: Πρόβλημα σε sql για υπολογισμό κατανάλωσης καυσίμου

    Έχουμε τον παρακάτω πίνακα που γεμίζεις τις τιμές
    create table vechFilled
                (
                 vechNo varchar(10),
                 kmMeter numeric(28,2),
                 FillQty numeric(28,2)
                )

    insert into vechFilled values ('ΖΥΒ7568',100500.0 ,25.20)
    insert into vechFilled values ('ΖΥΒ7568',100625 ,25.18)
    insert into vechFilled values ('ΖΙΜ6587',87600 ,26.32)
    insert into vechFilled values ('ΖΥΒ7568',100760 ,25.12)
    insert into vechFilled values ('ΖΙΜ6587',87750 ,26.18)

    To query που θέλεις είναι το παρακάτω

    select a.vechNo,
    a.kmMeter-(select top 1 b.kmMeter from vechFilled b where a.vechNo=b.vechNo and b.kmMeter<a.kmMeter order by kmMeter desc) ,
    (select top 1 b.FillQty from vechFilled b where a.vechNo=b.vechNo and b.kmMeter<a.kmMeter order by b.FillQty asc)
    from vechFilled a
    where (select top 1 b.FillQty from vechFilled b where a.vechNo=b.vechNo and b.kmMeter<a.kmMeter  order by b.FillQty asc)  is not null
    order by a.vechNo,a.kmMeter asc


    το αποτέλεσμα που θα πάρεις είναι αυτό που ζητάς

    ΖΙΜ6587    150.00                                  26.32
    ΖΥΒ7568    125.00                                  25.20
    ΖΥΒ7568    135.00                                  25.18

    Πρέπει όμως να σκεφτείς και το τι γίνεται όταν μηδενίσει ο μετρητής.


    Ιωάννης Μανουσάκης
  •  18-03-2009, 10:01 49327 σε απάντηση της 49274

    Απ: Πρόβλημα σε sql για υπολογισμό κατανάλωσης καυσίμου

    marko δυστυχώς δεν μπορώ να επέμβω στην βάση για να κάνω δικά μου πεδία. Πάντως θα το ψάξω μήπως και μπορέσω τελικά
     
    George sorry αλλά δεν ανέφερα οτι ο πίνακας έχει και πεδίο date με τις ημερομηνίες που γίνεται ανεφοδιασμός του κάθε οχήματος
     
    πάντως αν θέλεις ανέλυσε πάλι την sql ειδικά αυτο με το history στη sql. Δεν πρέπει να λαμβάνουμε υποψιν μας τα litra στην τελευταία εγγραφή αφού αναφέρονται σε χλμ που δεν διανύθηκαν ακόμη
     
    Σας ευχαριστώ και πάλι
     
  •  18-03-2009, 10:09 49331 σε απάντηση της 49327

    Απ: Πρόβλημα σε sql για υπολογισμό κατανάλωσης καυσίμου

    Γίαννη ήταν ακριβώς αυτο που ήθελα. σε ευχαριστώ πολύ
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems