![]() |
Τρεις (ή χ) μεγαλύτερες τιμές από μια λίστα τιμών 2 Συνημμένο(α) Καλησπέρα σε όλους Τελικά μήπως ισχύει το "Όσο πιο πολλά μαθαίνεις τόσες περισσότερες απορίες έχεις"? Πάλι κόλλησα σε κάτι φαινομενικά εύκολο. Παρόλα αυτά δεν βρήκα λύση στο διεθνές προσκήνιο.. Ιδού το πρόβλημα: Πώς μπορούμε να πάρουμε ταυτόχρονα τις τρεις μεγαλύτερες τιμές με διαφορετικές εκφράσεις για την κάθε μία, σε ένα ερώτημα (ή με κώδικα) από μια λίστα τιμών ενός πίνακα; Παρότι υπάρχουν αρκετές λύσεις για την πρώτη ή την χ μεγαλύτερη τιμή (βλέπε συννημένα (σε Access 2010 και 2003)) δεν μπορώ να καταλήξω για την δεύτερη ή για την τρίτη κατά σειρά μεγαλύτερη τιμή ταυτόχρονα. Κάθε ιδέα καλοδεχούμενη... Δημήτρης |
Καλησπέρα! Δημήτρη, σε προβολή SQL ενός ερωτήματος επικόλλησε τον παρακάτω κώδικα SQL και δοκίμασε : Κώδικας: SELECT TOP 1 DMax("mynumbers","tbl") AS Number1, Τάσος |
Αυτό δεν το περίμενα..! Όχι για τόσο για την λύση.. αλλά για την ταχύτητα απάντησης..(31 λεπτά και κάτι δεύτερα..) Ευχαριστώ Τάσο Υ.Γ Αλήθεια ποιο είναι το ρεκόρ στο φορουμ? (χα) |
1 Συνημμένο(α) Σε συνέχεια του προηγούμενου: Πως θα ήταν δυνατό να βρούμε τις τρεις (ή χ) μεγαλύτερες τιμές, αυτή τη φορά μεταξύ όλων των πεδίων μιας εγγραφής; Και σ' αυτή την περίπτωση έχω βρει κώδικα για την πρώτη μεγαλύτερη τιμή (βλέπε module1 και ερώτημα XMaxNumbersOfRecord στο συνημμένο) αλλά για τις αμέσως επόμενες 2 (ή χ) μεγαλύτερες τιμές; Και πάλι ευχαριστώ θερμά Δημήτρης |
Καλημέρα! Δημήτρη, δοκίμασε τον παρακάτω κώδικα SQL: Κώδικας: SELECT Maximum(-2.225E-307,[mynumbers],[mynumbers2],[mynumbers3],[mynumbers4],[mynumbers5],[mynumbers6]) Κώδικας: Option Compare DatabaseΚαλή συνέχεια! Τάσος |
Όχι, αφού βγάλει μερικούς σωστούς υπολογισμούς αρχικά, μετά (και κυρίως όταν η εγγραφή/ες περιέχουν τιμές 0) δεν δείχνει πάντα τα αναμενόμενα αποτελέσματα κυρίως της 2ης και της 3ης μεγαλύτερης τιμής Π.χ όταν δίνω σε μια εγγραφή 8, 1, 9, 0, 0, 0, μου αποδίδει την 1η μεγαλύτερη το 9, τη 2η το 8 και την 3η πάλι το 8. Αλλά και όταν δεν υπάρχουν τιμές 0 πάλι μερικές φορές "κολλάει" σε εντελώς λάθος αποτελέσματα Δημήτρης |
Γενικά, είμαι κατά του κώδικα VBA στα ερωτήματα αν το ζητούμενο μπορεί να λυθεί με χρήση ενσωματωμένων συναρτήσεων της Access. Σε μένα πάντως δεν δημιουργείται κάποιο πρόβλημα ακόμα και σε περισσότερες εγγραφές. Μάλλον θα πρέπει να προσαρμόσεις τον κώδικα στα μέτρα σου. Τάσος |
1 Συνημμένο(α) Καλησπέρα στην παρέα Μια άλλη προσέγγιση στο ζητούμενο. Η παρακάτω συνάρτηση μας δίνει κατευθείαν την Χστή μέγιστη τιμή. Κώδικας: Public Function xMax(countMax As Integer, ParamArray values() As Variant) As VariantΤο ερώτημα συνεπώς σε προβολή SQL θα έχει τη μορφή. Κώδικας: SELECT tbl.*, xMax(1,[mynumbers],[mynumbers2],[mynumbers3],[mynumbers4],Φιλικά/Γιώργος |
Ψάχνοντας βρήκα οτι υπάρχουν πολλές διαφορετικές προσεγγίσεις.. Η λύση του Γιώργου νομίζω οτι μου κάνει άψογα Παρατήρηση: Εάν δεν υπάρχει περίπτωση αρνητικών ορισμάτων θα μπορούσε να γίνει cMax(0) = 0 αντί του cMax(0) = -2E+307. Τάσο, Γιώργο Ευχαριστώ θερμά Δημήτρης |
1 Συνημμένο(α) Δημήτρη σ’ ευχαριστώ. Για να ολοκληρώσω κάπως το θέμα, στην επισυναπτόμενη ΒΔ πρόσθεσα και μία συνάρτηση για την εύρεση της χ χαμηλότερης τιμής. Έκανα και μια μικρή βελτίωση στον κώδικα. Φιλικά/Γιώργος |
1 Συνημμένο(α) Γιώργο Τελικά η λύση σου, μου παρουσίασε προβλήματα Παράδειγμα: Αν τα ορίσματα είναι: 0,0,1,0,1,0 (στην περίπτωσή μου μπορούν να κυμαίνονται από 0-6) οι τρείς μεγαλύτερες τιμές θα έπρεπε να είναι 1,1,0 και όχι 1,0,0. Όπως και στην περίπτωση ορισμάτων 6,6,6,6,6,6 οι τρεις μεγαλύτερες τιμές θα είναι λογικά οι 6,6,6. Προσπάθησα να το διορθώσω μόνος μου. Δεν το κατόρθωσα. Επίσης στην τελευταία σου διόρθωση βγάζει συχνά αποτέλεσματα -2E+307. Πως μπορούμε να αντικαταστήσουμε το -2E+307 με 0, δεδομένου οτι τις ευρεθείσες τιμές πρέπει να τις χρησιμοποιήσω σε περαιτέρω πράξεις (το άθροισμα των τετραγώνων των τριών αυτών τιμών); Υ.Γ Άρχισα να απελπίζομαι.. Δημήτρης |
Δημήτρη στη λύση που έδωσα (νόμιζα ότι αυτό ζητούσες) οι 3 (χ) τιμές είναι διαφορετικές. Αν δεν υπάρχουν 3 (χ) διαφορετικές στη θέση αυτών που λείπουν θα επιστραφούν οι αρχικές τιμές (-2Ε+307). Αν δεν θέλεις οι τιμές να είναι διαφορετικές θα πρέπει να ξαναδώ τον κώδικα. Αν δεν υπάρχουν αρνητικές τιμές, άλλαξε την εντολή const mini = -2Ε+307 σε Const mini = 0 |
1 Συνημμένο(α) Έκανα στα γρήγορα μια αλλαγή, δοκίμασέ την καλύτερα. |
Ναι αυτό ήταν, επιτέλους........... Αυτή τη φορά το δοκίμασα εξαντλητικά, Δεν ξέρω πως να σας ευχαριστήσω Τάσο, και ιδιαίτερα Γιώργο και πάλι με σώσατε.. Καλή συνέχεια Φιλικά Δημήτρης |
| Η ώρα είναι 11:24. |
Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.