de173 Δημοσ. 15 Σεπτεμβρίου 2009 Δημοσ. 15 Σεπτεμβρίου 2009 Καλημέρα φίλοι insomniacs. Έχω μία απορία για να δημιουργήσω ένα sql query, μιας και κάνω τα πρώτα μου βήματα στην γλώσσα αυτή. Στην βάση μου έχω τις εξής γραμμές (βάζω ";" ώστε να ξεχωρίσω τις στήλες, το όνομα του πίνακα είναι "table1"): Number;Number-Image;Surname;Image;Amount;Date 1000;1000-0;XXXX;0;350;2009-09-07 1001;1001-0;YYYY;0;450;2009-09-07 1002;1002-0;DDDD;0;250;2009-09-08 1000;1000-1;XXXXFFFF;1;360;2009-09-08 Στο query θέλω να εμφανίσω τις γραμμές που αφορούν τα τελευταία images ανά Number. Δηλαδή: Number;Number-Image;Surname;Image;Amount;Date 1001;1001-0;YYYY;0;450;2009-09-07 1002;1002-0;DDDD;0;250;2009-09-08 1000;1000-1;XXXXFFFF;1;360;2009-09-08 Το σημείο που πρέπει να επισημάνω είναι ότι ο πελάτης XXXX μετά την ανανέωση της εγγραφής του, άλλαξε σε XXXXFFFF (και αυτό πρέπει να εμφανιστεί) καθώς και όλα τα στοιχεία της ανανεωμένης εγγραφής. Καμία πρόταση; Σας ευχαριστώ πολύ εκ των προτέρων!
kagelos Δημοσ. 15 Σεπτεμβρίου 2009 Δημοσ. 15 Σεπτεμβρίου 2009 Βασικά δεν πιάνω τι θες να κάνεις. Λες ότι θες να εμφανίσεις αυτά : Number;Number-Image;Surname;Image;Amount;Date 1001;1001-0;YYYY;0;450;2009-09-07 1002;1002-0;DDDD;0;250;2009-09-08 1000;1000-1;XXXXFFFF;1;360;2009-09-08 Με ποιες στήλες θες να γίνεται ταξινόμηση; Μπορείς να εξηγήσεις με ένα καλύτερο παράδειγμα τι θες να κάνεις; Οι χρήστες XXXX και XXXXFFFF είναι ο ίδιος; Αν ναι, μήπως έπρεπε να γίνει update η εγγραφή και όχι insert καινούρια;
de173 Δημοσ. 15 Σεπτεμβρίου 2009 Μέλος Δημοσ. 15 Σεπτεμβρίου 2009 Πρέπει να γίνει insert εκ νέου διότι η βάση κρατάει ιστορικά κάποια στοιχεία. Οπότε φαντάσου ότι μπορεί να είναι κάποιο επώνυμο γυναίκας η οποία λόγω γάμου το άλλαξε ή λογω ορθογραφικού, διορθώθηκε. Δεν με ενδιαφέρει η ταξινόμηση. Δεύτερο παράδειγμα. Έστω ότι στην βάση δεδομένων εισάγονται οι κάτωθι εγγραφές με ημερομηνία 2009-09-01: DocNumber;Doc-Image;Image;Surname;Paid-Amount-;Date-of-payment 1000;1000-0;0;ΠΑΠΑΔΟΠΟΥΛΟΥ;100;2009-09-01 1001;1001-0;0;ΔΕΜΕΝΑΓΑ;200;2009-09-01 1002;1002-0;0;ΠΑΠΑΧΡΗΣΤΟΣ;200;2009-09-01 Την επόμενη μέρα 2009-09-02 εισάγονται οι ακόλουθες εγγραφές (οι οποίες είναι νέες εγγραφές, δεν έχουν καμία σχέση με τις παραπάνω): DocNumber;Doc-Image;Image;Surname;Paid-Amount-;Date-of-payment 1003;1003-0;0;ΑΛΕΞΑΝΔΡΟΠΟΥΛΟΣ;100;2009-09-02 1004;1004-0;0;ΠΑΠΑΔΑΚΗ;300;2009-09-02 1005;1005-0;0;ΜΑΝΩΛΟΠΟΥΛΟΥ;450;2009-09-02 Στο τέλος της δεύτερης εισαγωγής, η βάση μου έχει τις ακόλουθες εγγραφές: DocNumber;Doc-Image;Image;Surname;Paid-Amount-;Date-of-payment 1000;1000-0;0;ΠΑΠΑΔΟΠΟΥΛΟΥ;100;2009-09-01 1001;1001-0;0;ΔΕΜΕΝΑΓΑ;200;2009-09-01 1002;1002-0;0;ΠΑΠΑΧΡΗΣΤΟΣ;200;2009-09-01 1003;1003-0;0;ΑΛΕΞΑΝΔΡΟΠΟΥΛΟΣ;100;2009-09-02 1004;1004-0;0;ΠΑΠΑΔΑΚΗ;300;2009-09-02 1005;1005-0;0;ΜΑΝΩΛΟΠΟΥΛΟΥ;450;2009-09-02 Την τρίτη ημέρα, εισάγονται 2 νέες εγγραφές (που δεν έχουν καμία σχέση με τις παραπάνω) καθώς επίσης εισάγεται και μία εγγραφή με μεταγενέστερη ημερομηνία αλλά αφορά την εγγραφή 1000. Κατά την εισαγωγή αυτής της εγγραφής, ο μετρητής Image αυξάνεται κατά 1 (από 0 γίνεται 1) και εισάγονται όλα τα νέα δεδομένα σε καινούργια εγγραφή. Έτσι έχουμε (την τρίτη ημέρα): DocNumber;Doc-Image;Image;Surname;Paid-Amount-;Date-of-payment 1000;1000-1;1;ΠΑΠΑΓΕΩΡΓΙΟΥ;110;2009-09-03 1006;1006-0;0;ΠΑΠΑΔΑΚΗ;300;2009-09-03 1007;1007-0;0;ΜΑΝΩΛΟΠΟΥΛΟΥ;450;2009-09-03 Η βάση μου λοιπον θα έχει τις ακόλουθες εγγραφές: DocNumber;Doc-Image;Image;Surname;Paid-Amount-;Date-of-payment 1000;1000-0;0;ΠΑΠΑΔΟΠΟΥΛΟΥ;100;2009-09-01 1001;1001-0;0;ΔΕΜΕΝΑΓΑ;200;2009-09-01 1002;1002-0;0;ΠΑΠΑΧΡΗΣΤΟΣ;200;2009-09-01 1003;1003-0;0;ΑΛΕΞΑΝΔΡΟΠΟΥΛΟΣ;100;2009-09-02 1004;1004-0;0;ΠΑΠΑΔΑΚΗ;300;2009-09-02 1005;1005-0;0;ΜΑΝΩΛΟΠΟΥΛΟΥ;450;2009-09-02 1000;1000-1;1;ΠΑΠΑΓΕΩΡΓΙΟΥ;110;2009-09-03 1006;1006-0;0;ΠΑΠΑΔΑΚΗ;300;2009-09-03 1007;1007-0;0;ΜΑΝΩΛΟΠΟΥΛΟΥ;450;2009-09-03 Όταν ζητήσω από το query να μου φέρει τις τελευταίες εικόνες όλων των εγγραφών, θα πρέπει να μου φέρει τις εξής εικόνες (ασχέτως sorting): DocNumber;Doc-Image;Image;Surname;Paid-Amount-;Date-of-payment 1001;1001-0;0;ΔΕΜΕΝΑΓΑ;200;2009-09-01 1002;1002-0;0;ΠΑΠΑΧΡΗΣΤΟΣ;200;2009-09-01 1003;1003-0;0;ΑΛΕΞΑΝΔΡΟΠΟΥΛΟΣ;100;2009-09-02 1004;1004-0;0;ΠΑΠΑΔΑΚΗ;300;2009-09-02 1005;1005-0;0;ΜΑΝΩΛΟΠΟΥΛΟΥ;450;2009-09-02 1000;1000-1;1;ΠΑΠΑΓΕΩΡΓΙΟΥ;110;2009-09-03 1006;1006-0;0;ΠΑΠΑΔΑΚΗ;300;2009-09-03 1007;1007-0;0;ΜΑΝΩΛΟΠΟΥΛΟΥ;450;2009-09-03 Παρατήρησε ότι ΔΕΝ υπάρχει η προηγούμενη εικόνα της εγγραφής με κωδικό 1000. Έχει πλέον αντικατασταθεί από την νέα εγγραφή του κωδικού "1000". Έχω την εντύπωση ότι πρέπει να γίνει με την συνάρτηση MAX.
kagelos Δημοσ. 15 Σεπτεμβρίου 2009 Δημοσ. 15 Σεπτεμβρίου 2009 Σε SQL Server γίνεται έτσι : > select A.DocNumber, A.Img, A.DocImage, A.Surname, A.PaidAmount, A.PaymentDate from table1 A group by A.DocNumber, A.Img, A.DocImage, A.Surname, A.PaidAmount, A.PaymentDate having A.Img = (select max(B.Img) from table1 B where B.DocNumber = A.DocNumber) order by A.DocNumber, A.Img Ένας τρόπος. Αν δεις και αργεί δεν κάνει. Τα ονόματα των στηλών δεν είναι ακριβώς ίδια - άλλαξέ τα.
snowPrincess Δημοσ. 15 Σεπτεμβρίου 2009 Δημοσ. 15 Σεπτεμβρίου 2009 Με μια γρήγορη ματιά το 2ο πεδίο σου μου φαίνεται λάθος. Αν κατάλαβα καλά πάντα ο πρώτος αριθμός θα είναι η τιμή του 1ου πεδίου, άρα περιττό να υπάρχει και σου δυσκολεύει χωρίς λόγο το query σου μετά. Άστο έτσι DocNumber;Doc-Image;Image;Surname;Paid-Amount-;Date-of-payment 1001;0;0;ΔΕΜΕΝΑΓΑ;200;2009-09-01 1001;1;0;ΔΕΜΕΝΑΓΑ;300;2009-09-02 Άρα τώρα είναι πολύ απλό να διαλέξεις το τελευταίο Doc-Image κάθε Doc-Number...
kagelos Δημοσ. 15 Σεπτεμβρίου 2009 Δημοσ. 15 Σεπτεμβρίου 2009 @snowPrincess Το κάνει ήδη αυτό. Έχει DocNumber & Image Το Doc-Image είναι η ένωση των 2. Θα μπορούσε να μην υπάρχει αλλά τεσπα.
snowPrincess Δημοσ. 15 Σεπτεμβρίου 2009 Δημοσ. 15 Σεπτεμβρίου 2009 @snowPrincessΤο κάνει ήδη αυτό. Έχει DocNumber & Image Το Doc-Image είναι η ένωση των 2. Θα μπορούσε να μην υπάρχει αλλά τεσπα. Αυτό είπα, πως είναι περιττό και, μάλιστα, του δυσκολεύει και την αναζήτηση. Άρα επιβάλλεται να μην υπάρχει!
de173 Δημοσ. 16 Σεπτεμβρίου 2009 Μέλος Δημοσ. 16 Σεπτεμβρίου 2009 Βασικά αυτό το πεδίο δημιουργείται κατά την εισαγωγή των εγγραφών στην βάση. Απλά το έδωσα ώστε να βοηθήσω στην λύση του προβλήαμτος. Προσάρμοσα τον κώδικα του snowPrincess και όλα πήγαν ρολόι Thank you!
kagelos Δημοσ. 16 Σεπτεμβρίου 2009 Δημοσ. 16 Σεπτεμβρίου 2009 Προσάρμοσα τον κώδικα του snowPrincess και όλα πήγαν ρολόι Τουλάχιστον θα τα βάλεις με τον (την?) snowPrincess αν αργεί το query
snowPrincess Δημοσ. 16 Σεπτεμβρίου 2009 Δημοσ. 16 Σεπτεμβρίου 2009 Τουλάχιστον θα τα βάλεις με τον (την?) snowPrincess αν αργεί το query Princess = Πριγκήπισσα Και γιατί να αργεί το query παρακαλώ; Αν το έκανε με το λάθος τρόπο, που είχε ξεκινήσει, θα ήταν καλύτερα;
kagelos Δημοσ. 16 Σεπτεμβρίου 2009 Δημοσ. 16 Σεπτεμβρίου 2009 Ο de173 λέει οτι προσάρμοσε κώδικα δικό σου. Πότε του έστειλες κώδικα; Φαντάστηκα ότι όταν έλεγε ότι προσάρμοσε τον δικό σου κώδικα, μπερδεύτηκε και εννοούσε τον δικό μου, άρα λέω ότι αν δεν παίζει καλά το query δεν θα τα βάλει με το σωστό άτομο (αφου θα νομίζει ότι του το έδωσες εσύ ενώ του το έδωσα εγώ)
snowPrincess Δημοσ. 16 Σεπτεμβρίου 2009 Δημοσ. 16 Σεπτεμβρίου 2009 Ο de173 λέει οτι προσάρμοσε κώδικα δικό σου. Πότε του έστειλες κώδικα; Φαντάστηκα ότι όταν έλεγε ότι προσάρμοσε τον δικό σου κώδικα, μπερδεύτηκε και εννοούσε τον δικό μου, άρα λέω ότι αν δεν παίζει καλά το query δεν θα τα βάλει με το σωστό άτομο (αφου θα νομίζει ότι του το έδωσες εσύ ενώ του το έδωσα εγώ) Δεν του έδωσα query. Απλά το πεδίο του είπα να αλλάξει. Δε χρειάζεται να κάνουμε τη ζωή μας δυσκολότερη, σχηματίζοντας λάθος τη βάση από την αρχή.
de173 Δημοσ. 17 Σεπτεμβρίου 2009 Μέλος Δημοσ. 17 Σεπτεμβρίου 2009 Sorry Sorry!!! Δικά μου λάθη και τα δύο! Το query ήταν του kagelos... Thanks kagelos αλλά και όλους όσοι ασχοληθήκατε με το θέμα By the way, δεν καθυστέρησε καθόλου το query. Μια χαρά τα πήγε! Και όσο για το δεύτερο λάθος (του -> την) συγγνώμη princess....
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.