Προς το περιεχόμενο

SQL query - MAX image


de173

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα φίλοι 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 (και αυτό πρέπει να εμφανιστεί) καθώς και όλα τα στοιχεία της ανανεωμένης εγγραφής.

 

Καμία πρόταση;

 

 

Σας ευχαριστώ πολύ εκ των προτέρων!

Δημοσ.

Βασικά δεν πιάνω τι θες να κάνεις. Λες ότι θες να εμφανίσεις αυτά :

 

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 καινούρια;

Δημοσ.

Πρέπει να γίνει 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.

Δημοσ.

Σε 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

 

Ένας τρόπος. Αν δεις και αργεί δεν κάνει.

Τα ονόματα των στηλών δεν είναι ακριβώς ίδια - άλλαξέ τα.

Δημοσ.

Με μια γρήγορη ματιά το 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...

Δημοσ.
@snowPrincess

Το κάνει ήδη αυτό. Έχει DocNumber & Image

Το Doc-Image είναι η ένωση των 2. Θα μπορούσε να μην υπάρχει αλλά τεσπα.

 

Αυτό είπα, πως είναι περιττό και, μάλιστα, του δυσκολεύει και την αναζήτηση. Άρα επιβάλλεται να μην υπάρχει!

Δημοσ.

Βασικά αυτό το πεδίο δημιουργείται κατά την εισαγωγή των εγγραφών στην βάση. Απλά το έδωσα ώστε να βοηθήσω στην λύση του προβλήαμτος.

 

Προσάρμοσα τον κώδικα του snowPrincess και όλα πήγαν ρολόι :)

 

Thank you!

Δημοσ.

Προσάρμοσα τον κώδικα του snowPrincess και όλα πήγαν ρολόι :)

 

Τουλάχιστον θα τα βάλεις με τον (την?) snowPrincess αν αργεί το query :lol:

Δημοσ.
Τουλάχιστον θα τα βάλεις με τον (την?) snowPrincess αν αργεί το query :lol:

 

Princess = Πριγκήπισσα :-)

Και γιατί να αργεί το query παρακαλώ;

Αν το έκανε με το λάθος τρόπο, που είχε ξεκινήσει, θα ήταν καλύτερα;

Δημοσ.

Ο de173 λέει οτι προσάρμοσε κώδικα δικό σου. Πότε του έστειλες κώδικα; Φαντάστηκα ότι όταν έλεγε ότι προσάρμοσε τον δικό σου κώδικα, μπερδεύτηκε και εννοούσε τον δικό μου, άρα λέω ότι αν δεν παίζει καλά το query δεν θα τα βάλει με το σωστό άτομο (αφου θα νομίζει ότι του το έδωσες εσύ ενώ του το έδωσα εγώ) ;)

Δημοσ.
Ο de173 λέει οτι προσάρμοσε κώδικα δικό σου. Πότε του έστειλες κώδικα; Φαντάστηκα ότι όταν έλεγε ότι προσάρμοσε τον δικό σου κώδικα, μπερδεύτηκε και εννοούσε τον δικό μου, άρα λέω ότι αν δεν παίζει καλά το query δεν θα τα βάλει με το σωστό άτομο (αφου θα νομίζει ότι του το έδωσες εσύ ενώ του το έδωσα εγώ) ;)

 

Δεν του έδωσα query. Απλά το πεδίο του είπα να αλλάξει. Δε χρειάζεται να κάνουμε τη ζωή μας δυσκολότερη, σχηματίζοντας λάθος τη βάση από την αρχή.

Δημοσ.

Sorry Sorry!!! Δικά μου λάθη και τα δύο!

Το query ήταν του kagelos... Thanks kagelos αλλά και όλους όσοι ασχοληθήκατε με το θέμα :)

By the way, δεν καθυστέρησε καθόλου το query. Μια χαρά τα πήγε!

 

Και όσο για το δεύτερο λάθος (του -> την) συγγνώμη princess....

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...