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

 

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

Year to month sum

Îåêßíçóå áðü ôï ìÝëïò Phobos. Τελευταία δημοσίευση από το μέλος Panagiotis Kefalidis στις 17-03-2008, 18:39. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-03-2008, 14:41 40925

    Year to month sum

    Καλησπέρα,

    Έχω ένα πίνακα με 2 πεδία : Date , Orders

    DATE

    ORDES

    2007-01-31 00:00:00.000

    5

    2007-02-28 00:00:00.000

    8

    2007-03-31 00:00:00.000

    10

    2007-04-30 00:00:00.000

    5

    Θέλω   με ένα Query σε κάθε επόμενη ημ/νία να προσθέτω το σύνολο των παραγγελιών μου ώστε  να έχει το παρακάτω αποτέλεσμα.

     

    DATE

    ORDES

    2007-01-31 00:00:00.000

    5

    2007-02-28 00:00:00.000

    13

    2007-03-31 00:00:00.000

    23

    2007-04-30 00:00:00.000

    28

     Καμία ιδέα…….

     ευχαριστώ

     

  •  17-03-2008, 16:07 40932 σε απάντηση της 40925

    Απ: Year to month sum

    CREATE TABLE dbo.SalesByMonth
    (
        Dated Datetime,
        Sales int
    )
    GO
     
    INSERT INTO dbo.SalesByMonth(Dated,Sales) VALUES ('2007-01-31', 5 )
    INSERT INTO dbo.SalesByMonth(Dated,Sales) VALUES ('2007-02-28 ', 8)
    INSERT INTO dbo.SalesByMonth(Dated,Sales) VALUES ('2007-03-31' ,10)
    INSERT INTO dbo.SalesByMonth(Dated,Sales) VALUES ('2007-04-30 ', 5 )
    GO
     
    SELECT SM1.Dated, (SELECT Sum(Sales) FROM SalesByMonth AS SM2 WHERE SM2.dated <= SM1.dated) as TotalSalesByMonth
    FROM SalesByMonth SM1
    ORDER BY SM1.Dated


    DROP TABLE dbo.SalesByMonth
    GO

    Στέφανος
    New Yorker

    Στέφανος
    New Yorker
  •  17-03-2008, 16:18 40933 σε απάντηση της 40932

    Απ: Year to month sum

    ευχαριστώ πολύ!

  •  17-03-2008, 16:24 40934 σε απάντηση της 40925

    Απ: Year to month sum

    Υπάρχουν διάφοροι τρόποι για να το πετύχεις αυτό.

    • Τα περνάς στον client και αφήνεις τον client να κάνει τη δουλειά
    • Με cursors (μπλιάχ!!!!)
    • Με correlated subquery ή με join - Δεν έχει καλή απόδοση αλλά είναι single-statement
    • Με προσωρινό πίνακα ή table variable - Έχει καλύτερη απόδοση καθώς δημιουργείς ένα πίνακα που θα κρατάει τα αποτελέσματα και κατόπιν κάνεις διαδοχικά updates. Είναι πιο δύσκολο και απαιτεί πολλαπλά statements
    • Στον SQL Server 2005/2008 γίνεται με Ranking Functions (αν και αν δεν κάνω λάθος πάλι θα πρέπει να χρησιμοποιήσεις προσωρινό πίνακα/table variable)

    Βλέπω ότι δεν προσδιορίζεις τι database χρησιμοποιείς, οπότε δεν ξέρω ποιά λύση σου κάνει.


    Vir prudens non contra ventum mingit
  •  17-03-2008, 16:32 40936 σε απάντηση της 40934

    Απ: Year to month sum

    Σε ευχαριστώ KelMan ο New Yorker με κάλυψε απόλυτα. Για την Ιστορία.. χρησιμοποιώ SQL Server 2005.

     

     

  •  17-03-2008, 18:15 40939 σε απάντηση της 40936

    Απ: Year to month sum

    No prob, απλά έχε υπόψην σου το παρακάτω:

    DECLARE @SalesTotals TABLE
    (
    RowId INTEGER,
    Dated DATETIME,
    Sales INTEGER
    )

    INSERT INTO @SalesTotals
    SELECT row_number() OVER ( ORDER BY Dated ) rowId,
    Dated,
    Sales
    FROM SalesByMonth

    DECLARE @total integer
    SET @total = 0

    UPDATE st
    SET @total = st.Sales = @total + st.Sales
    FROM @SalesTotals st

    SELECT *
    FROM @SalesTotals

    Αν αρχίσει να μεγαλώνει ο πίνακας, τότε θα δεις ικανή διαφορά με το παραπάνω. Αυτό συμβαίνει γιατί ο τρόπος με το subquery θα κάνει περίπου N*(N+1)/2 logical reads ενώ ο παραπάνω κώδικας θα κάνει περίπου N καθώς το UPDATE συμβαίνει σε fetched data, δηλαδή στη μνήμη, χωρίς να έχει μεγάλο κόστος.

     

     


    Vir prudens non contra ventum mingit
  •  17-03-2008, 18:39 40940 σε απάντηση της 40939

    Απ: Year to month sum

    Κι ημουν έτοιμος να ρωτήσω γιατί δεν χρησιμοποιείτε memory table αλλά το έγραψε ο Μάνος!


    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

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